9

私はEquipment と呼んだ 1 つのテーブルと、 equipment_child1呼んだ他の 8 つのテーブルを持っています

そのすべてのテーブル間の共通フィールドはcod_equip です。このフィールドを使用すると、すべての子機器テーブルを機器の親テーブルで識別できます。

機器を移動するときに機器からデータを削除する必要がありますが、すべてのテーブルの機器_子1から機器_子8のデータを削除する必要があります。

それから私は innoDB エンジンでDELETE CASCADEを使用したことを覚えていますが、今は MyISAM エンジンを使用しています。それは問題ですか?

どんな助けでも、本当に明確になります...

4

1 に答える 1

14

はい。単にあなたはそのエンジンではできません。

編集。テーブル内のレコードを削除すると、他のすべてのテーブル内のすべての子レコードを削除するトリガーを作成できます。

Ok。私はあなたに例を書きました:

 create table tab1 (
 id int )
 engine = myisam;

insert into tab1 values (1),(2),(3),(4); 

 create table tab2(
 id int not null auto_increment primary key,
 id_tab1 int
 ) engine = myisam;

 insert into tab2 (id_tab1) values (1),(2),(2),(3),(4);

 create table tab3(
 id int not null auto_increment primary key,
 id_tab1 int
 ) engine = myisam;

  insert into tab3 (id_tab1) values (1),(2),(2),(3),(2);


delimiter //
create trigger deletecascade after delete on tab1
for each row
begin
delete from tab2 where id_tab1 = old.id;
delete from tab3 where id_tab1 = old.id;
end; //
delimiter ;

delete from tab1 where id = 2;

それがお役に立てば幸いです。

編集。明らかに、同時にtable1からさらにIDを削除しても機能します。

delete from tab1 where id in (2,3,4);
于 2011-03-17T17:31:38.697 に答える