2011-03-17 18 views
8

Tengo una tabla que había llamado equipos, y otros 8 mesas que había llamado equipment_child1 y así sucesivamente hasta equipment_child8.Cómo usar delete cascade en MySQL MyISAM storage engine?

El campo común, conviene que entre todas las tablas es cod_equip, con este campo soy capaz de identificar todos mis equipos niño tablas con equipos tabla primaria.

necesito eliminar datos de equipos cuando el equipose mueve, pero tengo que borrar datos en todas mis tablas equipment_child1 a equipment_child8.

entonces recuerdo que había usado DELETE CASCADE en el motor innoDB, pero ahora estoy usando MyISAM engina, ¿eso es un problema?

Cualquier ayuda, realmente aclarará ...

Respuesta

14

Sí. Simplemente no puedes con ese motor.

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

Ok. 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); 
+0

¿Alguna idea de cómo hacer eso con los desencadenadores? – B4NZ41

+0

Guau, explicación muy agradable y simple, me adaptaré a mi código, realmente se ajusta perfecto! Gracias @nick – B4NZ41

+0

De nada. Adiós :) –

Cuestiones relacionadas