Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment utiliser delete cascade sur le moteur de stockage MySQL MyISAM ?

Oui. C'est tout simplement impossible avec ce moteur.

Éditer. Vous pouvez écrire un déclencheur qui, une fois que vous supprimez un enregistrement dans votre table, supprime tous les enregistrements enfants dans toutes les autres tables.

D'accord. Je t'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;

J'espère que ça aide.

Éditer. Évidemment, cela fonctionne même si vous supprimez plusieurs identifiants de table1 en même temps :

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