2011-03-17 62 views
8

我有,我曾呼籲設備一個表,8個,我已經叫equipment_child1依此類推,直到equipment_child8其他表。如何在MySQL MyISAM存儲引擎上使用刪除級聯?

所有表之間的黎民場cod_equip,這個領域我是能夠認同設備父表中的所有我的孩子設備表。

我需要從設備刪除數據時設備移動,但我需要在我所有的表equipment_child1到equipment_child8刪除數據。

然後我remenber我已經在innoDB引擎中使用DELETE CASCADE,但現在我正在使用MyISAM engina,這是一個問題嗎?

任何幫助,將真正澄清...

回答

14

是的。只是你不能用那個引擎。

編輯。你可以編寫一個觸發器,一旦你刪除了表中的記錄,刪除所有其他表中的所有子記錄。

好的。我給你寫了一個例子:

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; 

希望它有幫助。

編輯。顯然,即使您同時從table1中刪除更多id,它也能正常工作:

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

任何想法如何使用觸發器做到這一點? – B4NZ41 2011-03-17 17:43:51

+0

哇,非常好,簡單的解釋,我會適應我的代碼,真的很適合完美!謝謝@nick – B4NZ41 2011-03-17 18:39:55

+0

不客氣。再見:) – 2011-03-17 18:55:44