親レコードと子レコードを格納するテーブルがあります。
親が削除されたときにすべての子レコードを削除するトリガーを作成しようとしていました:
Delete From tbl Where ParentId = OLD.Id
トリガーを正常に保存できますが、削除すると次のエラーが発生します。
エラー 1442: これを呼び出したステートメントで既に使用されているため、ストアド関数/トリガーのテーブル 'tbl' を更新できません
私は何を間違っていますか?
親レコードと子レコードを格納するテーブルがあります。
親が削除されたときにすべての子レコードを削除するトリガーを作成しようとしていました:
Delete From tbl Where ParentId = OLD.Id
トリガーを正常に保存できますが、削除すると次のエラーが発生します。
エラー 1442: これを呼び出したステートメントで既に使用されているため、ストアド関数/トリガーのテーブル 'tbl' を更新できません
私は何を間違っていますか?
秒。Delete Cascade
同じテーブルで子レコードを作成することができます。MYSQLフォーラムのこの投稿に答えがありました。これが私がそれを機能させる方法です。
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.
これは、ユーザーがアルバム内のアルバム内にアルバムを作成できるギャラリーである私のプロジェクトにとって非常に大きなものでした。