हमारी एक साइट पर कुछ ऐसा ही है, हमने तालिकाओं का एक समूह जोड़ा है:
users
sites
... आदि
फिर हमारे पास शैडो टेबल का एक गुच्छा होता है:
users-shadow
sites-shadow
... आदि
परिवर्तन करने वाले उपयोगकर्ता के लिए एक अतिरिक्त पंक्ति को छोड़कर छाया तालिकाओं में वास्तविक तालिकाओं के समान संरचनाएं होती हैं। इसलिए सबसे पहले हम इस क्वेरी का उपयोग तब करते हैं जब किसी उपयोगकर्ता द्वारा परिवर्तन सबमिट किया जाता है, जिसे अपने डेटाबेस कार्यों को स्वीकृत करने की आवश्यकता होती है:
REPLACE INTO users-shadow (user_mod,id,username,password,salt...) VALUES (16,50,'bob','stuff','salt'...);
जाहिर है, सुनिश्चित करें कि यह इंजेक्शन के लिए खुला नहीं है, तैयार बयान आदि
स्वीकृत होने पर, shadow
में एक पंक्ति तालिका को केवल shadow
. से हटा दिया जाता है तालिका, user_mod
मूल्य गिरा और परिवर्तन (गैर-शून्य मान) वास्तविक तालिका में डाला गया (या यदि कोई id
अद्यतन किया गया हो) निर्दिष्ट किया गया है, REPLACE
का उपयोग करके वाक्य - विन्यास)। हम इस तर्क को पर्ल में करते हैं इसलिए दुख की बात है कि इसके लिए कोई एसक्यूएल हाथ में नहीं है।
याद रखें कि SQL REPLACE
एक DELETE
करता है और एक INSERT
UPDATE
के बजाय . इस व्यवहार की अनुमति देने के लिए आपको किसी भी ट्रिगर में संशोधन करना होगा।
नोट:हमने 'स्वीकृति' ध्वज का उपयोग नहीं करने का कारण यह था कि हमें मौजूदा रिकॉर्ड में संशोधन करने की क्षमता की आवश्यकता थी, निश्चित रूप से हमारे पास एक ही प्राथमिक कुंजी के साथ कई रिकॉर्ड नहीं हो सकते थे।