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

कैस्केड को कैसे हटाएं जब पैरेंट आईडी और चाइल्डआईडी एक ही टेबल पर हों?

आपको बस यह सुनिश्चित करने की ज़रूरत है कि आपने ON DELETE CASCASDE के साथ चाइल्ड रो से उसके पैरेंट के लिए एक विदेशी कुंजी सेट की है। विदेशी कुंजी पर सेट विकल्प। यह एक स्व-संदर्भ तालिका के समान ही अच्छी तरह से काम करता है क्योंकि यह अलग-अलग तालिकाओं में संदर्भों के लिए करता है। पेड़ को हटाने के लिए, बस मूल नोड को हटा दें। सभी चाइल्ड पंक्तियों को सरसरी तौर पर हटा दिया जाएगा।

जैसे दिया गया:

CREATE TABLE MyTable
(
  ID INT NOT NULL PRIMARY KEY,
  ParentID INT  NULL,
  CONSTRAINT FK_MT_Parent FOREIGN KEY (ParentID) REFERENCES MyTable(ID) ON DELETE CASCADE
);

-- And inserting two trees of data:
-- 1-2-3
--   └-4
-- 10 - 11
INSERT INTO MyTable(ID,ParentID) VALUES
    (1,null), (2,1), (3,2), (4,2),
    (10,null), (11,10);

हम केवल रूट नोड को हटाकर पूरे पहले पेड़ को हटा सकते हैं:

DELETE FROM MYTable WHERE ID = 1;

SqlFiddle of वही

हालांकि ध्यान दें कि दस्तावेज़ कि 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. जूमला! डेटाबेस तालिका बनाने पर 3 इंस्टॉलेशन फ़्रीज हो जाता है

  2. MySQL में विदेशी कुंजी?

  3. PHP MySQL परिणामों को कैश करने का सबसे अच्छा तरीका?

  4. MySQL लॉग () फ़ंक्शन - किसी मान का प्राकृतिक लघुगणक लौटाएं

  5. Laravel में इसे कैसे करें, सबक्वेरी जहां in