Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

डिलीट या अपडेट पर बिना किसी कार्रवाई के विदेशी कुंजियों का उपयोग क्यों करें

मुझे लगता है कि आप गलत समझ रहे हैं कि ON DELETE NO ACTION साधन। यह नहीं करता है विदेशी-कुंजी बाधा को दबाने का मतलब है।

जब आप किसी विदेशी कुंजी द्वारा संदर्भित रिकॉर्ड को हटाते हैं, तो InnoDB स्थिति को सुधारने के लिए एक स्वचालित कार्रवाई करने की क्षमता रखता है:

  • यह CASCADE कर सकता है , अर्थ, रेफ़रिंग रिकॉर्ड को हटा दें। (यह user_address.user_id . जैसी किसी चीज़ के लिए उचित होगा . यदि आप किसी उपयोगकर्ता को हार्ड-डिलीट करते हैं, तो संभवतः आप उपयोगकर्ता के सभी पतों को भी हार्ड-डिलीट करना चाहते हैं।)
  • यह SET NULL , अर्थ, रेफ़रिंग कुंजी को साफ़ करें। (यह file.last_modified_by . जैसी किसी चीज़ के लिए अर्थपूर्ण हो सकता है . यदि आप किसी उपयोगकर्ता को हार्ड-डिलीट करते हैं, तो हो सकता है कि आप चाहते हैं कि फ़ाइल का अंतिम-संशोधित-बाय बस "अज्ञात" हो जाए।)

यदि आप NO ACTION निर्दिष्ट करते हैं , आप InnoDB को बता रहे हैं कि आप नहीं चाहते कि यह इनमें से कोई भी कार्रवाई करे। तो InnoDB आपके लिए स्थिति को ठीक नहीं कर सकता; यह केवल DELETE को अस्वीकार कर सकता है और एक त्रुटि लौटाएं।

परिणामस्वरूप, ON DELETE NO ACTION वास्तव में ON DELETE RESTRICT . जैसा ही है (डिफ़ॉल्ट)।

(नोट:कुछ DBMSes में, और मानक SQL में, ON DELETE NO ACTION ON DELETE RESTRICT . से थोड़ा अलग है :उनमें, ON DELETE NO ACTION का अर्थ है "DELETE स्वीकार करें वर्तमान लेनदेन के भीतर, लेकिन अगर मैं समस्या को सुधारने से पहले इसे प्रतिबद्ध करने का प्रयास करता हूं तो पूरे लेनदेन को अस्वीकार कर देता हूं। लेकिन InnoDB आस्थगित चेक का समर्थन नहीं करता है, इसलिए यह ON DELETE NO ACTION व्यवहार करता है। बिल्कुल वैसा ही ON DELETE RESTRICT , और हमेशा DELETE . को अस्वीकार करता है तुरंत ।)

देखें §§14.2.2.5 "विदेशी कुंजी बाधाएं" और 13.1.17.2 "विदेशी कुंजी बाधाओं का उपयोग करना " MySQL 5.6 संदर्भ मैनुअल में।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. टेक्स्ट कॉलम के साथ MySQL टेबल

  2. MySQL के साथ माध्यिका की गणना करने का सरल तरीका

  3. कैसे डार्ट के साथ mysql डेटाबेस कनेक्ट करने के लिए?

  4. ASCII () उदाहरण – MySQL

  5. पाठक बंद होने पर पढ़ने का अमान्य प्रयास