मैं नियमित रूप से "डिलीट कैस्केड" का उपयोग करता हूं लेकिन मैं कभी भी "अद्यतन कैस्केड पर" उपयोग नहीं करता क्योंकि मुझे यह सुनिश्चित नहीं है कि यह किस स्थिति में उपयोगी होगा।"अद्यतन अद्यतन कैस्केड" का उपयोग कब करें
चर्चा के लिए कुछ कोड देखें।
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
);
"चालू हटाना कैस्केड" के लिए, यदि एक id
साथ एक माता पिता हटा दी जाती है, parent_id = parent.id
के साथ बच्चे में एक रिकॉर्ड स्वचालित रूप से हटा दिया जाएगा। यह कोई समस्या नहीं होनी चाहिए।
इसका मतलब यह है जब माता पिता की
id
अद्यतन किया जाता है कि "अद्यतन CASCADE पर" एक ही बात करेंगे?हैं (1) सच है, इसका मतलब है अगर
parent.id
जब यहAUTO_INCREMENT
है या हमेशाTIMESTAMP
होना करने के लिए सेट की तरह updatable नहीं है (या अद्यतन किया जा कभी नहीं होगा) "अद्यतन CASCADE पर" का उपयोग करने की कोई जरूरत नहीं है। क्या वह सही है?यदि (2) सच नहीं है, तो हमें किस प्रकार की स्थिति में "अद्यतन कैस्केड पर" उपयोग करना चाहिए?
क्या होगा यदि मैं (किसी कारण से)
child.parent_id
को कुछ मौजूदा नहीं होने के लिए अद्यतन करता हूं, तो क्या यह स्वचालित रूप से हटा दिया जाएगा?
परीक्षण ठीक है, मुझे पता है, इसके बाद के संस्करण प्रश्न के कुछ हो सकता है programmically को समझने के लिए लेकिन मैं यह भी है कि अगर यह के किसी भी डेटाबेस विक्रेता पर निर्भरशील है या नहीं पता करना चाहते हैं।
कृपया कुछ प्रकाश डालें।
यह भी देखें: http://stackoverflow.com/questions/6894162/postgresql-how-to-compact-renumber-id-for-all-tables-and-reset-sequences-to-max –