MySQL学习10:外键约束下的更新操作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL学习10:外键约束下的更新操作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3534字,纯文字阅读大概需要6分钟。
内容图文
![MySQL学习10:外键约束下的更新操作](/upload/InfoBanner/zyjiaocheng/464/eb88631b02d84a5a96a0fa099de6b72a.jpg)
一外键约束的参照操作
我们进行外键约束的创建以后,在更新表的时候,子表是否也进行相应的更新。这是我们创建外键约束最大的好
处。有以下几种:
1)CASCADE:从父表删除或更新且自动删除或更新子表中匹配的行。
2)SET NULL:从父表删除或更新行,并设置子表中的外键列为NULL。如果使用该选项,必须保证子表列没有指
定NOT NULL。
3)RESTRICT:拒绝对父表的删除或更新操作。
4)NO ACTION:标准SQL的关键字,在MySQL中与RESTRICT相同。
二更新外键约束的字段准备工作
(1)创建一个子表users1
CREATE TABLE users1(
id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(10) NOT NULL,
pid SMALLINT UNSIGNED,
FOREIGN KEY (pid) REFERENCES provinces (id) ON DELETE CASCADE
);
SHOW CREATE TABLE users1;
(2)在父表provinces插入记录并且查看父表的记录信息:
INSERT provinces(pname) VALUES(‘A‘);
INSERT provinces(pname) VALUES(‘B‘);INSERT provinces(pname) VALUES(‘C‘);
SELECT * FROM provinces;
(3)在子表users1插入记录:
INSERT users1(username,pid) VALUES(‘Tom‘,3);
INSERT users1(username,pid) VALUES(‘John‘,3);
INSERT users1(username,pid) VALUES(‘Tom‘,6);
INSERT users1(username,pid) VALUES(‘Rose‘,1);
SELECT * FROM users1;
由上面结果知道:如果外键列pid字段的数字大于3就不会插入记录,这是因为外键列pid字段参照的是父表
provinces中的参照列id字段,既然父表中id字段只存在3条,那么子表users1中插入的pid字段当然不能大于3;但是插
入记录会存在索引,这就是上面结果显示的原因,也是id字段为1,2,4的原因。
三外键约束下的删除操作
假设我们把provinces数据表中的id=3的记录删除
DELETE FROM provinces WHERE id=3;
SELECT * FROM provinces;
SELECT * FROM users1;
既然删除做到了,那么更新数据也会做到同样的效果,这里就不再进行举例说明。
四更新操作参考
(1)ON DELETE操作
RESTRICT(约束):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则不
允许删除。
NO ACTION:意思同RESTRICT,即如果存在从数据,不允许删除主数据。
CASCADE(级联):当在父表(即外键的来源表)中删除对应记录时,首先检查该记录否有对应外键,如果有则也删
除外键在子表(即包含外键的表)中的记录。
SET NULL:当在父表(即外键的来源表)中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表
中该外键值为null(不过这就要求该外键允许取null)。
(2)ON UPDATE操作
RESTRICT(约束):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则
不允许更新。
NO ACTION:意思同RESTRICT。CASCADE(级联):当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则也
更新外键在子表(即包含外键的表)中的记录。
SET NULL:当在父表(即外键的来源表)中更新对应记录时,首先检查该记录是否有对应外键,如果有则设置子
表中该外键值为null(不过这就要求该外键允许取null)。
注:NO ACTION和RESTRICT的区别:只有在及个别的情况下会导致区别,前者是在其他约束的动作之后执
行,后者具有最高的优先权执行。
五表级约束与列级约束
按照参照数目的多少来划分:分为表级约束和列级约束。
对一个数据列建立的约束,称为列级约束。列级约束既可以在列定义时声明,也可以在列定义后声明。
对多个数据列建立的约束,称为表级约束。表级约束只能在列定义后声明。
使用表级约束和列级约束需要注意的是:
1NOT NULL约束和DEFAULT约束不存在表级约束。其余的约束都存在列级约束和表级约束。
2实际开发过程中,列级约束使用的较多,表级约束很少使用。
MySQL学习10:外键约束下的更新操作
标签:
本文系统来源:http://blog.csdn.net/erlian1992/article/details/51363539
内容总结
以上是互联网集市为您收集整理的MySQL学习10:外键约束下的更新操作全部内容,希望文章能够帮你解决MySQL学习10:外键约束下的更新操作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。