sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo usar delete cascade en el motor de almacenamiento MySQL MyISAM?

Sí. Simplemente no puedes con ese motor.

editar. Podría escribir un activador que, una vez que elimine un registro en su tabla, elimine todos los registros secundarios en todas las demás tablas.

Está bien. Te escribí un ejemplo:

 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;

Espero que ayude.

editar. Obviamente, funciona incluso si elimina más ID de la tabla 1 al mismo tiempo:

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