亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

外鍵約束 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的零距離接觸
  • 參與學習       396747    人
  • 解答問題       3497    個

本課程涵蓋全部MySQL數據庫的基礎,學習MySQL數據庫的基礎知識

進入課程

外鍵約束 SET NULL

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號