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

एकाधिक कॉलम विदेशी कुंजी:एकल कॉलम को सभी के बजाय हटाएं पर शून्य पर सेट करें

कुछ शोध के बाद ऐसा लगता है कि विदेशी कुंजियों का उपयोग करके उस विशेष आवश्यकता को लागू नहीं किया जा सकता है।

सबसे अच्छा समाधान विदेशी कुंजी . के मिश्रण का उपयोग करना प्रतीत होता है और एक ट्रिगर

दिए गए उदाहरण के लिए समस्या को निम्नलिखित कथनों द्वारा हल किया जा सकता है:

CREATE TABLE lectures (
  lectureId INT NOT NULL,
  title VARCHAR(10) NOT NULL,
  PRIMARY KEY (lectureId)
 );

CREATE TABLE groups (
  lectureId INT NOT NULL,
  groupNo INT NOT NULL,
  title VARCHAR(10) NOT NULL,
  PRIMARY KEY (lectureId,groupNo),
  FOREIGN KEY (lectureId) REFERENCES lectures (lectureId)
    ON UPDATE CASCADE ON DELETE CASCADE
 );

CREATE TABLE studentListed (
  studentId INT NOT NULL,
  lectureId INT NOT NULL,
  groupNo INT NULL,
  PRIMARY KEY (studentId,lectureId),
  FOREIGN KEY (lectureId) REFERENCES lectures (lectureId) 
    ON UPDATE CASCADE ON DELETE CASCADE,
  FOREIGN KEY (lectureId,groupNo) REFERENCES groups (lectureId,groupNo)
    ON UPDATE CASCADE ON DELETE CASCADE
 );

CREATE TRIGGER GroupDelete BEFORE DELETE ON groups
FOR EACH ROW
  UPDATE studentListed SET studentListed.groupNo = NULL
    WHERE studentListed.lectureId = OLD.lectureId
    AND studentListed.groupNo = OLD.groupNo;

ध्यान दें कि अंतिम विदेशी कुंजी का "ON DELETE CASCADE" कभी भी कैस्केड डिलीट की ओर नहीं ले जाएगा क्योंकि ट्रिगर ने संबंधित पंक्तियों को शून्य करके विदेशी कुंजी संदर्भों को पहले ही हटा दिया है।

जोड़:"ऑन डिलीट कैस्केड" का उपयोग करने के बजाय एक ही ट्रिगर के साथ "ऑन डिलीट सेट न्यूल" का उपयोग कर सकता है, लेकिन फिर "लेक्चर आईडी" को शून्य होना चाहिए और एक में "चेक (व्याख्यान आईडी पूर्ण नहीं है)" शामिल होना चाहिए। यह सुनिश्चित करने के लिए कि यह कभी भी शून्य पर सेट न हो




  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. Node.js में SQL इंजेक्शन को रोकना

  3. MySQL कार्यक्षेत्र डेटाबेस सर्वर से कनेक्ट नहीं हो सकता

  4. MySQL डीबी में कॉलम नामों में हाइफ़न

  5. माता-पिता बच्चे में पदानुक्रमित डेटा प्रिंट करें अनियंत्रित सूची PHP?