如何解决MySQL错误-无法更新存储的函数/触发器中的表'library_audit2',因为该语句已使用该表
MariaDB [practice2]> delimiter $$
MariaDB [practice2]> create trigger BeforeLibraryDelete1
-> BEFORE DELETE
-> ON library_audit2 FOR EACH ROW
-> BEGIN
-> declare id1 int;
-> select library_id into id1 from library_audit2 where change_date=OLD.change_date;
-> delete from library_2 where library_2.id=id1;
-> END $$
Query OK,0 rows affected (0.128 sec)
MariaDB [practice2]> delimiter ;
MariaDB [practice2]> Delete from library_audit2 where change_date='2017-04-07';
ERROR 1442 (HY000): Can't update table 'library_audit2' in stored function/trigger because it is already used by statement which invoked this stored function/trigger
解决方法
您有一个针对每行触发的删除触发器。我真的没有看到再次从源表中进行选择只是为了获取要删除的行的ID的意义。该信息已在触发器级别的伪列old.id1
中提供。
这不是您想要的吗?
create trigger beforelibrarydelete1
before delete on library_audit2
for each row
begin
delete from library_2 where id = old.id;
end $$
阅读问题下的注释,似乎您正在尝试使用此触发器处理外键依赖性。如果您在library2
中有引用library_audit2
的子记录,那么只要从父表中删除记录,就可以使用on delete cascade
选项自动删除它们。
create table library2 (
...
foreign key (id)
references library_audit2(id)
on delete cascade
);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。