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

MySQL चयन पंक्ति को तब तक लॉक करें जब तक कि उस पर UPDATE नहीं चलाया गया हो?

दो प्रश्नों के आसपास एक लेन-देन रखें, और FOR UPDATE . का उपयोग करें SELECT . में विकल्प उन पंक्तियों को लॉक करने के लिए क्वेरी करें जिनकी उसने जांच की थी। कोई अन्य कनेक्शन जो उस पंक्ति को पढ़ने का प्रयास करता है, लेन-देन किए जाने तक निलंबित रहेगा।

सुनिश्चित करें कि आपके पास WHERE . में आपके द्वारा परीक्षण किए गए कॉलम पर एक इंडेक्स है क्लॉज, इसलिए इसे स्कैन नहीं करना होगा और अपनी इच्छित पंक्तियों को खोजने से पहले चेक की गई सभी पंक्तियों को लॉक करना होगा।

START TRANSACTION;

SELECT @id := `id`,`item` 
FROM `queue_items` 
WHERE `processed_at` IS NULL AND `completed_at` IS NULL 
ORDER BY `id` ASC 
LIMIT 1
FOR UPDATE;

UPDATE `queue_items` SET `processed_at` = @processedAt WHERE `id` = @id

COMMIT;


  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 अद्यतन INSERT INTO से तेज़ है?

  2. mysqldump - केवल ऑटोइनक्रिकमेंट के बिना निर्यात संरचना

  3. मैं एक स्थानीय यूनिक्स सॉकेट को इनसेट सॉकेट में कैसे मैप कर सकता हूं?

  4. दौड़ की स्थिति पर चुनिंदा फाउंड_रो को तोड़ने से कैसे रोकें?

  5. MySQL में CSV डेटा आयात करते समय खाली पूर्णांक फ़ील्ड के लिए डिफ़ॉल्ट मान