重庆小潘seo博客

当前位置:首页 > 重庆网络营销 > 小潘杂谈 >

小潘杂谈

了解MySQL中的外键作用

时间:2020-09-22 21:00:06 作者:重庆seo小潘 来源:
【相关学习推荐:mysql学习】 MySQL外键的作用: 保持数据一致性,完整性,主要目的是控制存储在外键表中的数据。使两张表形成关联,外键只能引用外表中列的值! 我们来建两个表CREATE TABLE `example1` (`stu_id` int(11) NOT NULL DEFAULT 0,`course_id` i

了解MySQL中的外键作用

【相关学习推荐:mysql学习】

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;会发现报错

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

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

这样就成功了;

事件触发限制:

on delete和on update , 可设参数cascade(跟随外键改动), restrict(限制外表中的外键改动),set Null(设空值),set Default(设默认值),[默认]no action

我们来看看事件触发限制是干嘛的。。。

我们先删除外键,然后重新建立外键带上事件触发限制

我们先查看一下数据+--------+-----------+-------+| stu_id | course_id | grade |+--------+-----------+-------+|1 |1 |98.5 |+--------+-----------+-------+1 row in set (0.00 sec)+----+--------+-----------+| id | stu_id | course_id |+----+--------+-----------+|1 |1 |1 |+----+--------+-----------+1 row in set (0.00 sec)这时example1和example2中的stu_id和course_id都是1,

再来修改example1表中的数据看看

再来查看数据+--------+-----------+-------+| stu_id | course_id | grade |+--------+-----------+-------+|3 |3 |98.5 |+--------+-----------+-------+1 row in set (0.00 sec)+----+--------+-----------+| id | stu_id | course_id |+----+--------+-----------+|1 |3 |3 |+----+--------+-----------+1 row in set (0.00 sec)发现没,example1和example2中的stu_id和course_id都变成了3

我们在来删除example1表中的数据

会发现可以删除,而且example2中的数据也没有了;

其实啊,外键就这个作用,保持数据一致性,完整性,是不让改还是一起改,由事件触发器决定;

以上就是了解MySQL中的外键作用的详细内容,更多请关注小潘博客其它相关文章!