लेन-देन में एक चयन स्टेटमेंट डालना


10

इन 2 प्रश्नों में क्या अंतर है:

START TRANSACTION;
SELECT * FROM orders WHERE id=1;
UPDATE orders SET username='John' WHERE id=1;
COMMIT;

और लेनदेन के बिना:

SELECT * FROM orders WHERE id=1;
UPDATE orders SET username='John' WHERE id=1;  

SELECTएक लेनदेन के अंदर होने का क्या प्रभाव है ?

यदि दोनों मामलों में DELETE FROM orders WHERE id=1सही होने के बाद दूसरे सत्र से बुलाया जाता है SELECT, तो इसे कब संसाधित किया जाएगा?

जवाबों:


5

किसी लेन-देन के अंदर एक चयनित क्वेरी, अपने आप में UPDATEs और DELETEs से ठीक से परिरक्षित नहीं है।

आपको निम्नलिखित का उपयोग करने की आवश्यकता है:

यदि आप जारी करते हैं Delete From orders Where id=1, तो यह तब होगा जब ordersलेन-देन के अंत में तालिका में पंक्तियों ने अपने ताले जारी किए होंगे। आप READ UNCOMMITTEDतार्किक रूप से डिलीट करने के लिए ट्रांजेक्शन आइसोलेशन लेवल का उपयोग करके (एक देव / स्टेजिंग सर्वर पर, प्रयोग कर सकते हैं) , लेकिन केवल कमिट पर ही यह दृश्यमान और स्थायी रूप से रिकॉर्ड हो जाएगा।

दूसरे लेन-देन में, मूल रूप से सभी दांव बंद हैं। अगर तुम दौड़ते हो

select * From orders Where id=1;
UPDATE orders SET username="John" Where id=1;

दौड़ना Delete From orders Where id=1तुरंत प्रतिबद्ध होगा। MySQL इन कथनों को निष्पादित करने के आदेश के आधार पर, क्या आप हटाए गए पंक्तियों को देखेंगे (या नहीं देखेंगे)।

चेतावनी

MySQL 5.6 अब निम्नलिखित है :

  • START TRANSACTION READ WRITE;
  • START TRANSACTION READ ONLY;

READ WRITE और READ ONLY संशोधक लेन-देन एक्सेस मोड सेट करते हैं। वे लेनदेन में उपयोग की जाने वाली तालिकाओं में परिवर्तन की अनुमति देते हैं या रोकते हैं। READ ONLY प्रतिबंध लेन-देन को संशोधित करने या लेन-देन दोनों को रोकने से रोकता है, जो अन्य लेनदेन के लिए दृश्यमान हैं; लेन-देन अभी भी अस्थायी तालिकाओं को संशोधित या लॉक कर सकता है। ये संशोधक MySQL 5.6.5 के रूप में उपलब्ध हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.