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

क्या INSERT IGNORE टेबल को लॉक कर देता है, भले ही वह इन्सर्ट पर ध्यान न दे?

यह इंजन पर निर्भर करता है - MyIsam और InnoDb अलग-अलग व्यवहार करते हैं।

MyIsam तालिकाओं के लिए, यदि तालिका में एक रिकॉर्ड पहले से मौजूद है (भले ही यह अभी तक प्रतिबद्ध नहीं है), उसी रिकॉर्ड का एक नियमित INSERT ( वही अद्वितीय कुंजी) दूसरे सत्र में डुप्लिकेट कुंजी त्रुटि की रिपोर्ट करता है - इसलिए INSERT IGNORE केवल त्रुटि को अनदेखा करता है और आगे बढ़ता है।

InnoDB तालिका पर, यदि रिकॉर्ड लॉक नहीं है, तो नियमित INSERT तुरंत डुप्लिकेट कुंजी त्रुटि की रिपोर्ट करें (INSERT IGNORE त्रुटि को छोड़ देगा और आगे बढ़ेगा)।
लेकिन अगर रिकॉर्ड दूसरे सत्र द्वारा लॉक किया गया है (उदाहरण के लिए रिकॉर्ड डाला गया है लेकिन अभी तक कमिट नहीं किया गया है, या रिकॉर्ड एक द्वारा लॉक किया गया है अद्यतन करें या हटाएं या अद्यतन आदेश के लिए चयन करें), INSERT कमांड "लटका" होगा और तब तक प्रतीक्षा करेगा जब तक कि अन्य सत्र लॉक को हटा नहीं देगा (COMMIT या ROLLBACK द्वारा)। फिर, यदि लॉक हटाने के बाद भी रिकॉर्ड मौजूद है, तो INSERT त्रुटि की रिपोर्ट करेगा (INSERT IGNORE त्रुटि को अनदेखा करेगा), लेकिन यदि रिकॉर्ड मौजूद नहीं है, तो INSERT इस रिकॉर्ड को तालिका में जोड़ देगा।

IGNORE कीवर्ड केवल यह कहता है "किसी भी त्रुटि के मामले में बस इसे अनदेखा करें", लेकिन यह लॉकिंग व्यवहार को प्रभावित नहीं करता है।




  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 सर्वर से कनेक्ट नहीं हो सकता

  3. mysql सारांश का उपयोग करते हुए सभी पंक्तियों को पुनः प्राप्त कर रहा है

  4. mySQL विशेषज्ञ - 'प्रतिच्छेदन' के साथ मदद की ज़रूरत है

  5. MySQL में एग्रीगेट फ़ंक्शंस (SUM, AVG, MAX, MIN, COUNT, DISTINCT) का उपयोग करना