Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie verwende ich Delete Cascade auf der MySQL MyISAM-Speicher-Engine?

Ja. Mit dieser Engine geht das einfach nicht.

bearbeiten. Sie könnten einen Trigger schreiben, der nach dem Löschen eines Datensatzes in Ihrer Tabelle alle untergeordneten Datensätze in allen anderen Tabellen löscht.

In Ordnung. Ich habe dir ein Beispiel geschrieben:

 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;

Hoffe, dass es hilft.

bearbeiten. Offensichtlich funktioniert es auch, wenn Sie gleichzeitig mehrere IDs aus Tabelle1 löschen:

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