आप डेटाबेस की एक कॉपी बना सकते हैं और ट्रिगर्स को 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 का उपयोग कर सकते हैं।