में मौजूद नहीं है तो मेरे पास टेबल टेबल concept_access और concept_access_log है। मैं एक ट्रिगर बनाना चाहता हूं जो हर समय concept_access से कुछ हटा दिया जाता है, जांचें कि लॉग तालिका में समान रिकॉर्ड है या नहीं, तो concept_access से इसे हटाए जाने से पहले नया डालें। concept_access मेंअगर ट्रिगर
DROP TRIGGER IF EXISTS before_delete_concept_access;
DELIMITER //
CREATE TRIGGER before_delete_concept_access
BEFORE DELETE ON `concept_access` FOR EACH ROW
BEGIN
IF (SELECT 1 FROM concept_access_log WHERE map=OLD.map
AND accesstype=OLD.accesstype AND startdate=OLD.startdate AND stopdate=OLD.stopdate) IS NULL THEN
INSERT INTO concept_access_log (map, accesstype, startdate, stopdate)
VALUES (OLD.map, OLD.accesstype, OLD.startdate, OLD.stopdate);
END IF;
END//
DELIMITER ;
नमूना डेटा से पहले हटा दें::
मैं ट्रिगर संशोधित और अब यह इस तरह दिखता है
map accesstype startdate stopdate
1 public NULL NULL
1 loggedin 2011-05-11 NULL
1 friends NULL NULL
लॉग तालिका में पहले से ही पहले 2 पंक्तियां हैं। और वे बिल्कुल concept_access के समान हैं। जब मैं concept_access तालिका के प्रथम पंक्ति को हटा, मैं लॉग तालिका में इस मिल:
map accesstype startdate stopdate
1 public NULL NULL
1 loggedin 2011-05-11 NULL
1 friends NULL NULL
1 public NULL NULL
हालांकि यह क्योंकि (1, जनता, अशक्त, नल) पहले से ही वहां मौजूद कुछ भी डालने के लिए नहीं होता।
इस तालिका में कोई प्राथमिक कुंजी नहीं है। मैं संरचना नहीं बना रहा था, इसलिए मुझसे मत पूछो क्यों। इसे बदलने से पहले से ही बहुत सारी मौजूदा कार्यक्षमता बर्बाद हो जाएगी। मुझे बस concept_access
तालिका से हटाए गए लॉग को रखने की आवश्यकता है और डुप्लीकेट के बिना इसे लॉग में स्टोर करें।
यदि कोई भी गलत हो रहा है तो यह पता लगाएगा कि मैं वास्तव में सराहना करता हूं।
ठीक है, मैं क्या समस्या पता लगा है, लेकिन अभी भी उचित समाधान नहीं मिल रहा है। कुछ फ़ील्ड शून्य हो सकते हैं और, यदि OLD मान शून्य के बराबर होता है, तो 'accesstype = OLD.accesstype' जैसे कुछ काम नहीं करेगा। मैंने इसे '(accesstype = OLD.accesstype या OLD.accesstype IS NULL) में बदलने की कोशिश की, लेकिन अभी भी कोई भाग्य नहीं है ... – Jull
क्या आप हमें संपूर्ण संशोधित ट्रिगर भी दिखा सकते हैं, साथ ही "concept_access" में नमूना डेटा भी दिखा सकते हैं और आपके द्वारा हटाए जाने से पहले और बाद में लॉग तालिका में रिकॉर्ड? – pilcrow
@pilcrow: अपडेट – Jull