我有一个表,用于存储父记录和子记录。
我试图创建一个触发器,在删除父项时删除所有子记录:
Delete From tbl Where ParentId = OLD.Id
虽然我可以成功保存触发器,但在删除时我收到此错误:
错误1442:无法更新存储的函数/触发器中的表'tbl',因为它已被调用此语句的语句使用
我做错了什么?
答案 0 :(得分:6)
这似乎是not possible:
您无法删除表格中的行 激活了触发器。
您可能会考虑的其他一些选项:
答案 1 :(得分:0)
秒。可以在同一个表中执行Delete Cascade
个子记录。我发现this post in the MYSQL forums有答案。以下是我如何使用它。
来自MYSQL论坛:
create table edges(
ID int PRIMARY KEY,
parentid int,
unique key(id, parentid),
foreign key(parentID) references edges(ID) ON DELETE CASCADE ON UPDATE CASCADE
) engine=innodb;
insert into edges(ID,parentID) values (1,null),(2,1),(3,1),(4,2);
现在执行此操作并观看父级和所有子级删除级联:
delete from edges where id=2;
select * from edges will then show two records left. Record 1 and record 3.
这对我的项目来说是巨大的,这是一个用户可以在相册内的相册内创建相册的画廊。