为了账号安全,请及时绑定邮箱和手机立即绑定

外键约束 SET NULL

定义父表

CREATE TABLE provinces(

    -> id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

    -> pname VARCHAR(20) UNSIGNED

    -> );

插入3个值

INSERT provinces(pname) VALUES('A');

INSERT provinces(pname) VALUES('B');

INSERT provinces(pname) VALUES('C');

定义子表

CREATE TABLE users2(

    id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT,

     username VARCHAR(10),

     pid SMALLINT UNSIGNED,

     FOREIGN KEY (pid) REFERENCES provinces (id) ON UPDATE SET NULL

    );

插入值

INSERT users2(username,pid) VALUES('Tom',3);

INSERT users2(username,pid) VALUES('Jon',2);

INSERT users2(username,pid) VALUES('Kang',3);

删除父表第3列报错!!!!!!!

DELETE FROM provinces WHERE id=3;

错误如下:

ERROR 1451 (23000): Cannot delete or update a parent row: a foreign key constraint fails (`test`.`users2`, CONSTRAINT `users2_ibfk_1` FOREIGN KEY (`pid`) REFERENCES `provinces` (`id`) ON UPDATE SET NULL)

求助:这是为什么呢,我子表的外键列pid并没有设置为NOT NULL,为什么这个外键不生效呢?删除不了父表来更新。

正在回答

1 回答

在MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。
在MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据。可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况。

在命令行中输入:
SET FOREIGN_KEY_CHECKS = 0;
删除完成后设置
SET FOREIGN_KEY_CHECKS = 1;
这样再select发现已经删除成功!


0 回复 有任何疑惑可以回复我~
#1

深海之Reve 提问者

外键约束是这样的吗,我认为的 外键约束 SET NULL,关联后起到的作用是:在provinces里删除数据id=3后,可以将关联的users2的第三个数据也置NULL。 这就是我搞不懂的地方
2019-09-28 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       397014    人
  • 解答问题       3350    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

外键约束 SET NULL

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信