百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>数据库> 理解MySQL中的外键作用
分享文章到:

理解MySQL中的外键作用

发布时间:09/01 来源:未知 浏览: 关键词:

【相关学习引荐: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;

会发明报错

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;

这样就成功了;

事件触发限制:

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

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

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

alter table example2 drop foreign key f_ck; alter table example2 add CONSTRAINT `f_ck` FOREIGN KEY (`stu_id`, `course_id`) REFERENCES `example1` (`stu_id`, `course_id`) ON DELETE CASCADE ON UPDATE CASCADE;

我们先查看一下数据

mysql> select * from example1;select * from example2;
+--------+-----------+-------+

| 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表中的数据看看

update example1 set stu_id=3,course_id=3 where stu_id=1;

再来查看数据

mysql> select * from example1;select * from example2;
+--------+-----------+-------+

| 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表中的数据

delete from example1 where stu_id=3;

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

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

相关学习引荐:编程视频

以上就是理解MySQL中的外键作用的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有151人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板