执行语句: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;