執行語句:DELETE FROM t_dept WHERE dept_no = '30';報錯
Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t_employee`, CONSTRAINT `t_employee_ibfk_1` FOREIGN KEY (`dept_no`) REFERENCES `t_dept` (`dept_no`))
原因:MySQL設置了foreign key關聯,造成無法更新或刪除數據。可以通過設置FOREIGN_KEY_CHECKS變量來避免這種情況。
SET FOREIGN_KEY_CHECKS = 0 //關閉外鍵約束
進行完操作后記得再把外鍵約束重新打開;
SET FOREIGN_KEY_CHECKS = 1 //打開外鍵約束
DROP TABLE t_dept; CREATE TABLE t_dept( dept_id INT(3) PRIMARY KEY, dept_no INT UNIQUE NOT NULL, dept_name VARCHAR(20) NOT NULL ); DROP TABLE t_employee; CREATE TABLE t_employee( emp_id INT(3) PRIMARY KEY, emp_no INT(3) UNIQUE NOT NULL, emp_name VARCHAR(10) NOT NULL, emp_age tinyint(4) NOT NULL DEFAULT 25 CHECK (emp_age BETWEEN 20 AND 60), sex VARCHAR(1) CHECK (sex in ('男','女')), job VARCHAR(20), sal INT(10), -- inline寫法 -- REFERENCES 主表(主表字段) -- dept_no int REFERENCES t_dept(dept_no) -- outline寫法 dept_no int NOT NULL, FOREIGN KEY(dept_no) REFERENCES t_dept(dept_no) ); insert into t_dept values(1,10,'IT技術部門'); insert into t_dept values(2,20,'市場部'); insert into t_dept values(3,30,'人事部'); -- 再插入員工數據 INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`) VALUES(1,1,'張三',25,'男','軟件開發',8500,10); INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`) VALUES(2,102,'張天三',29,'男','初級軟件開發',4500,10); INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`) VALUES(3,103,'張一',36,'男','測試人員',7500,10); INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`) VALUES(4,104,'王張三',63,'男','人事主管',12500,20); INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`) VALUES(5,105,'發呆張三',60,'男','高級程序員',18500,10); INSERT INTO `test`.`t_employee` (`emp_id`,`emp_no`,`emp_name`,`emp_age`,`sex`,`job`,`sal`,`dept_no`) VALUES(6,106,'快樂張三',30,'男','銷售經理',10500,30); SELECT * FROM t_employee; SELECT * FROM t_dept; -- MySQL設置了foreign key關聯,造成無法更新或刪除數據。可以通過設置FOREIGN_KEY_CHECKS變量來避免這種情況。 -- Cannot delete or update a parent row: a foreign key constraint fails (`test`.`t_employee`, CONSTRAINT `t_employee_ibfk_1` FOREIGN KEY (`dept_no`) REFERENCES `t_dept` (`dept_no`)) DELETE FROM t_dept WHERE dept_no = '30'; SET FOREIGN_KEY_CHECKS = 0; DELETE FROM t_dept WHERE dept_no = '30'; -- 刪除完后記得外鍵約束重新打開; SET FOREIGN_KEY_CHECKS = 1;