MySQL: क्या आपको स्पष्ट रूप से कहना है कि कौन सी पंक्ति को लॉक किया जाना चाहिए या INNODB को बस यह पता है? - mysql, innodb

मुझे पता है कि INNODB में रो-लेवल लॉकिंग है। तो अगर मैं ऐसा करता हूं:

LOCK TABLES users WRITE
SELECT credits FROM users WHERE userid = 1;
UPDATE users SET credits = ([CREDITS] + 100) WHERE userid = 1;
UNLOCK TABLES

क्या केवल उस पंक्ति को लॉक करने के लिए सहज स्मार्ट हैउस दूसरी, या केवल पंक्ति को बंद करने के लिए मुझे कुछ और कदम उठाने चाहिए? मेरी अवधि के दौरान केवल एक उपयोगकर्ता को लॉक करने के लिए निर्दोष कैसे जानता है? क्या यह पहले से ही चयनित SELECT पर लॉक होना चाहिए?

उत्तर:

उत्तर № 1 के लिए 1

यदि आप टेबल बनाते हैं तो आपको टेबल को खुद से लॉक करने की कोई आवश्यकता नहीं है विकल्प के साथ इंजन = InnoDB एक InnoDB मॉनिटर बनाया जाएगा।

CREATE TABLE t (i INT) ENGINE = InnoDB;

मॉनिटर स्वचालित रूप से तालिका को लॉक कर देता है, लेकिन लॉक एक पंक्ति के लिए नहीं है InnoDB ऑपरेशन / लेनदेन के लिए छेद तालिका को लॉक करेगा।

हो सकता है कि उपयोगकर्ता केवल तालिका को पढ़ना चाहता हैछेद की मेज पर एस लॉक हो जाता है। इसके साथ ही एक अन्य उपयोगकर्ता भी तालिका पढ़ सकता है, लेकिन अगर वह एक पंक्ति को हटाना चाहता है और वह x लॉक का अनुरोध करता है तो उसे दूसरे उपयोगकर्ता की प्रतीक्षा करनी चाहिए, जब तक कि वह अपना लॉक जारी नहीं करता।

MYSQL लॉक प्रकार संगतता मैट्रिक्स।

    X           IX            S          IS
X   Conflict    Conflict    Conflict    Conflict
IX  Conflict    Compatible  Conflict    Compatible
S   Conflict    Conflict    Compatible  Compatible
IS  Conflict    Compatible  Compatible  Compatible

कृपया mysql डॉक्टर पढ़ें:

InnoDB मॉनिटर - http://dev.mysql.com/doc/refman/5.1/en/innodb-monitors.html

InnoDB लॉक मोड - http://dev.mysql.com/doc/refman/5.1/en/innodb-lock-modes.html


संबंधित सवाल
सबसे लोकप्रिय