外键约束ON DELETE CASCADE不生效,删除部门表数据报错
搞定外键约束导致删不了部门数据的问题
嘿,我瞅了下你的问题,核心原因其实很明确:你最开始建emp表的时候,MySQL已经自动给你生成了一个不带ON DELETE CASCADE的外键约束(就是报错信息里的emp_ibfk_1),之后你又加了一个带级联删除的新约束,但旧的那个约束压根没删啊!所以你删部门数据的时候,旧约束还是会跳出来拦着你,自然就报错了。
一步步解决:
第一步:先把旧的外键约束删掉
先执行这条SQL,把那个碍事的旧约束移除:
ALTER TABLE emp DROP FOREIGN KEY emp_ibfk_1;
要是你不确定自己的旧约束名是不是这个,就跑
SHOW CREATE TABLE emp;看看表的创建语句,里面会明确写着外键约束的名称。
第二步:重新加带级联删除的外键约束
现在再添加咱们需要的带ON DELETE CASCADE规则的外键:
ALTER TABLE emp ADD CONSTRAINT fk_deptid FOREIGN KEY (deptid) REFERENCES dept(deptid) ON DELETE CASCADE;
第三步:试试删除操作
这时候你再去删dept表的某一行,关联的emp表中对应部门的员工记录会自动跟着删掉,不会再出现外键约束错误啦。
顺带提一嘴:
要是你是从头建表的话,其实可以直接在创建emp表的时候就把级联规则加上,省得后续折腾:
CREATE TABLE dept ( deptid INT PRIMARY KEY, deptname VARCHAR(20), locid INT ); CREATE TABLE emp ( empid INT PRIMARY KEY, frname VARCHAR(15), lname VARCHAR(20), hiredate DATETIME, deptid INT, FOREIGN KEY (deptid) REFERENCES dept(deptid) ON DELETE CASCADE );
内容的提问来源于stack exchange,提问作者coulttac
相关产品推荐
相关产品推荐

