2011-03-17 13 views
8

मैं एक मेज है कि मैं उपकरण बुलाया था, और 8 अन्य तालिकाओं कि मैं equipment_child1 बुलाया था और इतने पर equipment_child8 तक का समय है।MySQL MyISAM स्टोरेज इंजन पर डिलीट कैस्केड का उपयोग कैसे करें?

कि सभी तालिकाओं के बीच commom क्षेत्र, cod_equip है इस क्षेत्र को मैं साथ उपकरण माता पिता की मेज के साथ सब मेरी बच्चे उपकरण टेबल पहचान करने में सक्षम हूँ।

मैं जब उपकरण ले जाया जाता है उपकरण से डेटा हटाने की आवश्यकता है, लेकिन मैं में मेरी टेबल equipment_child8 को equipment_child1 सभी डेटा हटा की जरूरत है।

तो मैं remenber मैंने innoDB इंजन में डिलीट कैस्केड का उपयोग किया था, लेकिन अब मैं 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; 

आशा है कि इससे मदद मिलती है।

संपादित करें। स्पष्ट रूप से यह काम करता है भले ही आप तालिका 1 से एक ही समय में अधिक आईडी हटा दें:

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

किसी भी विचार को ट्रिगर्स के साथ कैसे करना है? – B4NZ41

+0

वाह, बहुत अच्छा और सरल स्पष्टीकरण, मैं अपने कोड के अनुकूल होगा, वास्तव में यह सही फिट बैठता है! धन्यवाद @nick – B4NZ41

+0

आपका स्वागत है। अलविदा :) –

संबंधित मुद्दे