使用触发器级联删除 -- 错误代码:1442无法更新存储函数/触发器中的表,因为

问题描述

过程:

我想用触发器实现级联删除,我创建了两个表,一个是老师的,一个是部门的(见图,两个表只设置了主键,都是第一列),我创建了一个del触发器实现级联删除删除dept表中的数据后,也删除了teacher表中的相关行),创建成功并发出delete命令后,出现红框中的错误信息。 [Error Code: 1442. 无法更新存储函数/触发器中的表“dept”,因为它已被调用此存储函数/触发器的语句使用。 ]

这是我创建的两个表:

CREATE TABLE dept (
dno varchar(20) NOT NULL,dname varchar(20) NOT NULL,pnumber int NOT NULL,PRIMARY KEY (dno))ENGINE=InnoDB DEFAULT CHARSET=utf8


CREATE TABLE teacher(
tnum varchar(20) NOT NULL,tname varchar(20) NOT NULL,tsex varchar(20) NOT NULL,title varchar(20) NOT NULL,wage int NOT NULL,dno varchar(20) NOT NULL,PRIMARY KEY (tnum)) ENGINE=InnoDB DEFAULT CHARSET=utf8

这是我创建的触发器:

create trigger del
after delete on dept
for each row
delete fromteacher where dno=old.dno;
 

这是查询

delete from dept where dno='9'; 

然后出现错误

action:delete from dept where dno='9' 
response:Error Code: 1442. Can't update table 'dept' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. 0.0019 sec

查了网上论坛报错的原因是没有删除一个表等操作避免递归循环,但是我是对两个不同的表实现删除操作的。

这种例子网上有很多,不明白为什么这里报错,也是第一次在这个论坛提问,不清楚格式问题,所以如果我不清楚,请原谅我。 enter image description here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)