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

MySQL में ट्रिगर और टेबल लॉक

मुझे लगता है कि इसे संभालने का सबसे अच्छा तरीका यहां वर्णित अद्यतन पैटर्न के लिए चयन ... का उपयोग करना होगा:http://dev.mysql.com/doc/refman/5.0/hi/innodb-locking-reads.html

संदर्भ के लिए:

 SELECT counter_field FROM child_codes FOR UPDATE; UPDATE child_codes
 SET counter_field = counter_field + 1; 

...

तो आपके मामले में, आप प्रतिस्थापित करेंगे

LOCK TABLES AlarmCount WRITE, AlarmMembership READ;
  UPDATE AlarmCount SET num = num - 1 
  WHERE RuleId = OLD.RuleId AND
      MemberId = 0 AND
      IsResolved = OLD.IsResolved;

कुछ इस तरह के साथ

SELECT num FROM AlarmCount WHERE RuleId = OLD.RuleId AND
          MemberId = 0 AND
          IsResolved = OLD.IsResolved FOR UPDATE;
UPDATE AlarmCount SET num = num - 1;

मैं "कुछ ऐसा" कहता हूं क्योंकि यह मेरे लिए पूरी तरह से स्पष्ट नहीं है कि OLD.RuleId और OLD.IsResolved क्या संदर्भित कर रहा है। http://dev.mysql से भी ध्यान देने योग्य .com/doc/refman/5.0/hi/innodb-locking-reads.html है:

UPDATE child_codes SET counter_field = LAST_INSERT_ID(counter_field +
1); 
SELECT LAST_INSERT_ID();

दूसरे शब्दों में, आप संभवतः केवल एक बार तालिका तक पहुँच कर इस पैटर्न को और अधिक अनुकूलित कर सकते हैं ... घ की जरूरत है। मुझे लगता है कि यदि आप एक नज़र डालते हैं, तो चुनें ... अद्यतन के लिए, हालांकि, आप देखेंगे कि पैटर्न क्या है, और आपको अपने वातावरण में यह काम करने के लिए क्या करने की आवश्यकता है।

मुझे यह भी उल्लेख करना चाहिए कि कुछ भंडारण इंजन वातावरण और लेनदेन अलगाव स्तर हैं जिन पर आप विचार करना चाहेंगे। यहाँ इस विषय पर SO पर बहुत अच्छी चर्चा है:अपडेट के लिए चुनें ... का उपयोग कब करें?

आशा है कि यह मदद करता है!




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. एकाधिक खोज स्थितियों के साथ एक MYSQL केस जब कथन कैसे लिखें?

  2. MYSQL - इस कोड में STRAIGHT_JOIN क्या करता है?

  3. दिनांक और समय के अनुसार अवरोही क्रम में छाँटना?

  4. एसक्यूएल चयन वाक्यविन्यास के साथ मदद करें

  5. क्या अप्रयुक्त mysql कनेक्शन स्क्रिप्ट को धीमा कर देते हैं?