Mysql
 sql >> Database >  >> RDS >> Mysql

Come utilizzare delete cascade sul motore di archiviazione MySQL MyISAM?

Sì. Semplicemente non puoi con quel motore.

modificare. Puoi scrivere un trigger che, una volta eliminato un record nella tabella, elimini tutti i record figlio in tutte le altre tabelle.

Ok. Ti ho scritto un esempio:

 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;

Spero che ti aiuti.

modificare. Ovviamente funziona anche se elimini più id da table1 contemporaneamente:

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