mysql学习问题-Cannot delete or update a parent row

执行语句: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;
复制代码

 

posted @   依羽杉  阅读(8111)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示