मैं नियमित रूप से "ON DELETE CASCADE" का उपयोग करता हूं, लेकिन मैं कभी भी "ON UPDATE CASCADE" का उपयोग नहीं करता हूं क्योंकि मुझे यकीन नहीं है कि यह किस स्थिति में उपयोगी होगा।
चर्चा के लिए कुछ कोड देखें।
CREATE TABLE parent (
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY (id)
);
CREATE TABLE child (
id INT NOT NULL AUTO_INCREMENT, parent_id INT,
INDEX par_ind (parent_id),
FOREIGN KEY (parent_id)
REFERENCES parent(id)
ON DELETE CASCADE
);
"DELETE CASCADE" के लिए, यदि अभिभावक id
को हटा दिया जाता है, तो बच्चे के साथ एक रिकॉर्ड parent_id = parent.id
स्वतः ही हटा दिया जाएगा। यह कोई समस्या नहीं होनी चाहिए।
इसका अर्थ है कि "ON UPDATE CASCADE"
id
माता-पिता के अपडेट होने पर वही काम करेगा ?यदि (1) सही है, तो इसका मतलब है कि "अपडेट कैस्केड" का उपयोग करने की कोई आवश्यकता
parent.id
नहीं है यदि यह अद्यतन करने योग्य नहीं है (या कभी भी अपडेट नहीं किया जाएगा) जैसे कि यहAUTO_INCREMENT
हमेशा होता है या हमेशा सेट होता हैTIMESTAMP
। क्या वह सही है?यदि (2) सही नहीं है, तो हमें "ON UPDATE CASCADE" का उपयोग किस तरह की स्थिति में करना चाहिए?
क्या होगा अगर मैं (किसी कारण के लिए)
child.parent_id
कुछ मौजूदा होने के लिए अद्यतन करता हूं, तो क्या यह स्वचालित रूप से हटा दिया जाएगा?
खैर, मुझे पता है, ऊपर दिए गए कुछ सवाल समझने के लिए प्रोग्रामेटिक रूप से टेस्ट किए जा सकते हैं, लेकिन मैं यह भी जानना चाहता हूं कि इसमें से कोई भी डेटाबेस वेंडर पर निर्भर है या नहीं।
कृपया कुछ प्रकाश डालें।