2011-03-17 4 views
8

J'ai une table que je l'avais appelé équipement, et 8 autres tables que j'avais appelé equipment_child1 et ainsi de suite jusqu'à equipment_child8.Comment utiliser supprimer cascade sur le moteur de stockage MySQL MyISAM?

Le champ commum entre les tables est que cod_equip, avec ce domaine, je suis en mesure d'identifier tous mes équipement enfant tables avec équipement table parent.

J'ai besoin de supprimer données de l'équipement lorsque l'équipement est déplacé, mais je dois supprimer des données dans toutes mes tables equipment_child1 à equipment_child8.

puis je me suis souvenu que j'avais utilisé DELETE CASCADE dans le moteur innoDB, mais maintenant j'utilise MyISAM engina, est-ce un problème? Toute aide, va vraiment clarifier ...

Répondre

14

Oui. Simplement vous ne pouvez pas avec ce moteur.

modifier. Vous pouvez écrire un déclencheur qui, une fois que vous avez supprimé un enregistrement dans votre table, supprime tous les enregistrements enfants de toutes les autres tables.

Ok. Je vous ai écrit un exemple:

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; 

Espérons que cela aide.

modifier. Évidemment, cela fonctionne même si vous supprimez plus d'id de table1 en même temps:

delete from tab1 where id in (2,3,4); 
+0

Une idée de comment faire cela avec des déclencheurs? – B4NZ41

+0

Wow, explication très sympa et simple, je vais m'adapter à mon code, vraiment ça correspond parfaitement! Merci @nick – B4NZ41

+0

De rien. Bye :) –

Questions connexes