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

MySQL में एक DELETE CASCADE अनुकरण करें?

आप डेटाबेस की एक कॉपी बना सकते हैं और ट्रिगर्स को after delete पर डाल सकते हैं

DELIMITER $$

CREATE TRIGGER ad_table1_each AFTER DELETE ON table1 FOR EACH ROW
BEGIN
  INSERT INTO log VALUES (null                 /*autoinc id*/
        , 'table1'                             /*tablename*/
        , old.id                               /*tableid*/
        , concat_ws(',',old.field1,old.field2  /*CSV's of fields*/
        , NOW()                                /*timestamp*/
        , 'delete');                           /*what action*/


  REPLACE INTO restore_table1 VALUES (old.id,
        , old.field1
        , old.field2
        , ... );

END $$

DELIMITER ;

लॉग टेबल केवल एक टेबल है जिसमें निम्नलिखित फ़ील्ड हैं:

id            integer autoincrement primary key
tablename     varchar(45)
table_id      integer
fields        varchar(6000)
delete_time   timestamp
action        enum('insert','update','delete')

अगर आप SELECT @last_id:= max(id) FROM log कॉपी पर कैस्केड हटाने से पहले।
फिर आप एक SELECT * FROM log WHERE id > @last_id कर सकते हैं।
और उन सभी पंक्तियों को प्राप्त करें जिन्हें कैस्केड में हटा दिया जाएगा।

उसके बाद आप कॉपी डेटाबेस में कैस्केड में हटाई गई पंक्तियों को फिर से बनाने के लिए रिस्टोर_टेबल1 का उपयोग कर सकते हैं।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JdbcDirectory का उपयोग करके डेटाबेस में ल्यूसीन इंडेक्स बनाएं

  2. PHP पीडीओ में क्वेरी सफलतापूर्वक निष्पादित होने पर कैसे बताना है?

  3. जावा स्ट्रिंग - mysql से अन्य भाषाओं के चरित्र को प्राप्त करना - क्या डेटा पूर्ण है?

  4. Node.js,express.js,mysql2 . में रो ऑब्जेक्ट से डेटा को पार्स कैसे करें?

  5. अनुक्रमणिका और बहु ​​स्तंभ प्राथमिक कुंजी