MySQL外键的作用和创建

参考地址: https://www.cnblogs.com/xiaozong/p/5682589.html

MySQL外键的作用:

保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。使两张表形成关联,外键只能引用外表中列的值!

我们来建两个表


CREATE TABLE `example1` (
  `stu_id` int(11) NOT NULL DEFAULT '0',
  `course_id` int(11) NOT NULL DEFAULT '0',
  `grade` float DEFAULT NULL,
  PRIMARY KEY (`stu_id`,`course_id`)
);
CREATE TABLE `example2` (
  `id` int(11) NOT NULL,
  `stu_id` int(11) DEFAULT NULL,
  `course_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `f_ck` (`stu_id`,`course_id`),
  CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example1` (`stu_id`, `course_id`)
);
insert into example1 (stu_id,course_id,grade)values(1,1,98.5),(2,2,89);
insert into example2 (id,stu_id,course_id)values(1,1,1),(2,2,2);


我们建了

example1表,里面包含stu_id学号,course_id课程号,grade分数

example2表,里面包含id,stu_id学号,course_id课程号,然后建立外键

分别插入数据到两个表中。

我们把example2中的stu_id和course_id称为example2表的外键,example1是父表,example2是字表,两个表形成关联,必须字表的数据删除后,才能删除父表中的对应数据

现在我们来删除example1中的一条数据

delete from example1 where stu_id=2;

会发现报错

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`example3`, CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example2` (`stu_id`, `course_id`))

因为example2中的数据关联了example1的数据,这样是删不了的,达到了外键的作用;

 

然后我们来先删除example2表中的数据,再删除example1表中的数据

delete from example2 where stu_id=2;

delete from example1 where stu_id=2;

这样就成功了;




function diffBetweenTwoDay($pastDay){
    $timeC = time() - strtotime($pastDay);
    $dateC = round((strtotime(date('Y-m-d')) - strtotime(date('Y-m-d',strtotime($pastDay))))/60/60/24);
    if($timeC<=3*60){
        $dayC = '刚刚';
    }elseif($timeC>3*60&&$timeC<=5*60){
        $dayC = '3分钟前';
    }elseif($timeC>5*60&&$timeC<=10*60){
        $dayC = '5分钟前';
    }elseif($timeC>10*60&&$timeC<=30*60){
        $dayC = '10分钟前';
    }elseif($timeC>30*60&&$timeC<=60*60){
        $dayC = '30分钟前';
    }elseif($timeC>60*60&&$timeC<=120*60){
        $dayC = '1小时前';
    }elseif($timeC>120*60&&$dateC == 0){
        $dayC = '今天';
    }elseif($dateC == 1){
        $dayC = '昨天';
    }else{
        $dayC = date('Y-m-d',strtotime($pastDay));
    }
    return $dayC;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值