外鍵約束 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,為什么這個外鍵不生效呢?刪除不了父表來更新。
2019-09-08
在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發現已經刪除成功!