MYSQL TABLE LOCKING IN HINDI.

हेलो दोस्तों आज के इस ब्लॉग पोस्ट(MYSQL TABLE LOCKING IN HINDI) में हम आपको MYSQL के अंतर्गत table level locking सिस्टम के बारे में बताने वाले है |

MYSQL के अंदर हम किसी टेबल पर कैसे लॉक लगा सकते है और हटा सकते है यह सब हम इस ब्लॉग में विस्तार से देखेंगे|MYSQL TABLE LOCKING IN HINDI|

इस ब्लॉग पोस्ट के जरिये आप सीखेंगे कि कैसे MYSQL locking सिस्टम का use करके अलग अलग sessions के द्वारा कैसे टेबल को access और restrict कर सकते है |MYSQL TABLE LOCKING IN HINDI|

lock एक्चुअली में एक तरह का फ्लैग होता है जो कि टेबल के साथ associate रहता है |MYSQL TABLE LOCKING IN HINDI|

MYSQL किसी भी एक क्लाइंट सेशन को किसी टेबल पर लॉक लगाने के लिए allow करता है…|MYSQL TABLE LOCKING IN HINDI|

.. जिससे कि उस specific पीरियड में कोई और session उस टेबल को एक्सेस न कर सके अथवा उस पर कोई अन्य operation परफॉर्म न कर सके|MYSQL TABLE LOCKING IN HINDI|

table lock in mysql in hindi
MYSQL TABLE LOCKING IN HINDI

कोई भी क्लाइंट सेशन लॉक को किसी टेबल पर सिर्फ अपने लिए लगा और हटा सकता है |

जबकि वह किसी अन्य क्लाइंट सेशन के लिए किसी टेबल पर लॉक को लगा अथवा हटा नहीं सकता है |

आगे बढ़ने से पहले हम एक टेबल क्रिएट कर लेते है जिससे हम इस लॉकिंग सिस्टम को प्रक्टिकली समझ सके |

CREATE TABLE messages ( 
    id INT NOT NULL AUTO_INCREMENT, 
    message VARCHAR(100) NOT NULL, 
    PRIMARY KEY (id) 
);

MySQL LOCK TABLES STATEMENT

यह नीचे दिया स्टेटमेंट टेबल पर explicitly लॉक को apply करता है |

LOCK TABLES table_name [READ | WRITE]

इस स्टेटमेंट में आप जिस भी टेबल पर लॉक लगाना चाहते है|

उस टेबल का नाम आप lock TABLES कीवर्ड के बाद specify कर दीजिये|

और इसके साथ ही आप लॉक का टाइप भी specify करते है जैसे कि Read अथवा Write|

MYSQL जो है वो आपको एक साथ कई सारी टेबल्स पर lock लगाने के लिए allow करता है |

इसके लिए आप TABLES के नाम comma separation के साथ लिख दीजिये जैसे कि निचे दिए एक्साम्प्ले में दिखाया गया है|

और फिर lock का टाइप specify कर दीजिये |

LOCK TABLES table_name1 [READ | WRITE], 
            table_name2 [READ | WRITE],
             ... ;

MySQL UNLOCK TABLES STATEMENT

किसी भी टेबल से लॉक को हटाने के लिए आप नीचे दिए गए स्टेटमेंट का उपयोग कर सकते है |

UNLOCK TABLES;

A READ lock has the following features:

किसी भी एक टेबल पर कई सारे sessions के द्वारा एक ही समय पर Read लॉक को acquire किया जा सकता है |

और इसके के साथ ही दूसरे sessions इस टेबल का डाटा रीड कर सकते है वो भी बिना किसी लॉक को acquire किये|

कोई भी सेशन जो टेबल पर रीड लॉक एक्वायर करता है वो केवल टेबल के डाटा को रीड कर सकता है पर कोई भी Write ऑपरेशन नहीं कर सकता है |

और दूसरे कोई सेशन भी टेबल पर Write ऑपरेशन परफॉर्म नहीं कर सकते है जब तक कि रीड लॉक रिलीज़ न हो जाये |

और अगर कोई दूसरे सेशन के द्वारा Write ऑपरेशन किया जाता है|

तो यह operation वेटिंग स्टेट में चला जायेगा जब तक कि टेबल से Read लॉक रिलीज़ नहीं होता है |

अगर कोई सेशन normally अथवा abnormally terminate होता है तो फिर ऐसे case में MYSQL implicitly सभी लॉक्स को रिलीज़ कर देगा|

और यह feature Write लॉक के केस में भी ऐसे ही काम करता है |

चलिए इसे थोड़ा विस्तार से देखते है कि Read लॉक ऐसे scenario में कैसे काम करता है :

पहले सेशन में connection _id function की मदद से डेटाबेस से कनेक्ट होईये और करंट connection id को प्राप्त कीजिये|

SELECT CONNECTION_ID();
connection id1
connection id1

इसके बाद मैसेज टेबल में नयी row को insert कीजिये|

INSERT INTO messages(message) 
VALUES('Hello');

message टेबल से डाटा को सेलेक्ट करिये |

SELECT * FROM messages;
selectresult1
selectresult1

इसके बाद message टेबल पर एक Read लॉक को एक्वायर करिये|

LOCK TABLE messages READ;

अब मैसेज टेबल में एक नयी row को insert करिये|

INSERT INTO messages(message) 
VALUES('Hi');

यहाँ पर MYSQL जो है वो नीचे दी गयी error को display करता है |

Error Code: 1099. Table 'messages' was locked with a READ lock and can't be updated.

तो इसका मतलब यह है कि एक बार किसी टेबल पर आपने Read लॉक एक्वायर कर लिए|

तब आप उस टेबल पर कोई भी Write ऑपरेशन परफॉर्म नहीं कर पाओगे उसी session के द्वारा|

चलिए अब रीड लॉक को किसी दूसरे session के द्वारा चेक करते है |

इसके लिए आप सबसे पहले database से reconnect होईये और फिर connection id को चेक कीजिये

SELECT CONNECTION_ID();
select connection id2
select connection id2

इसके बाद message टेबल का डाटा fetch करिये|

SELECT * FROM messages;
selectresult2
selectresult2

इसके बाद message टेबल एक नयी row insert कीजिये |

INSERT INTO messages(message) 
VALUES('Bye');

इसके बाद आप output को नीचे screen पर देख सकते है |

output1
output1

आप यहाँ पर साफ़ साफ़ देख सकते है कि सेकंड सेशन के द्वारा जो इन्सर्ट क्वेरी करी गयी है वो अभी वेटिंग स्टेट में है क्योकि फर्स्ट…

… सेशन द्वारा already मैसेज टेबल पर Read लॉक को acquire किया गया है और उसने अभी तक lock को रिलीज़ नहीं किया है |

first सेशन के द्वारा आप show processlist statement execute करके detailed इनफार्मेशन को देख सकते हैं |

SHOW PROCESSLIST;
processlist1
processlist1

इसके बाद आप अगर आप इस Read लॉक को रिलीज़ करना चाहते है|

तो फिर आपको first सेशन में जाकर unlock TABLES स्टेटमेंट execute करके आप इस Read लॉक को रिलीज़ कर सकते है |

अब इसके बाद आप जो insert स्टेटमेंट second सेशन द्वारा fire किया गया था वो अब execute हो जायेगा |

और इसके बाद आप message टेबल पर select query fire करके records को चेक कर सकते है कि वो insert हुआ कि नहीं |

SELECT * FROM messages;
selectresult3
selectresult3

पर यहाँ पर हम देखते है की रिकॉर्ड इन्सर्ट हो गया है | जैसे कि आप नीचे देख सकते है |

Write Locks

A WRITE lock has the following features:

Write lock के केस में जो सेशन table पर Write lock एक्वायर करता है|

सिर्फ वही सेशन टेबल में रीड और Write ऑपरेशन परफॉर्म कर सकता है |

और दूसरा कोई भी session जो है वो टेबल पर Read और Write operation को परफॉर्म नहीं कर सकता है|

जब तक कि उस पर Write lock acquire है |

चलिए अब हम इस WRITE lock को डिटेल में समझते है |

सबसे पहले हम पहले सेशन की मदद से टेबल पर WRITE लॉक को acquire करते है |

LOCK TABLE messages WRITE;

अब हम message टेबल में एक नयी row को insert करते है |

INSERT INTO messages(message) 
VALUES('Good Moring');

और यह क्वेरी successfully execute हो जाती है|

जिसे आप select query को execute करके देख सकते है |

SELECT * FROM messages;
selectresult4
selectresult4

मतलब कि इस session के द्वारा lock acquire करने के बाद भी यह session table पर Read और Write दोनों ऑपरेशन perform कर पा रहा है |

चलिए अब हम दूसरे session के द्वारा इस टेबल पर Read और Write ऑपरेशन perform करके देखते है |

INSERT INTO messages(message) VALUES('Bye Bye'); SELECT * FROM messages;

और यहाँ पर हम क्या देखते है कि MYSQL ने हमारे इन statement को वेटिंग स्टेट में रखा है |

इसे आप show processlist statement से चेक कर सकते है |

SHOW PROCESSLIST;
processlist2
processlist2

अब हम first सेशन के द्वारा लगाए गए lock को रिलीज़ कर देते है |

UNLOCK TABLES;

यहाँ पर आप देख सकते है कि lock हटाने के बाद ही हमारे pending operation एक्सेक्यूटे हो जाते है |

जैसे कि आप नीचे देख सकते है |

outputlast
outputlast

Read vs. Write Locks

Read लॉक जो होता है वो एक shared lock है जो की Write lock को एक्वायर करने से रोकता है पर वह दूसरे Read Locks को allow करता है |

Write lock जो है वो exclusive lock है और वह किसी भी प्रकार के अन्य Locks को एक्वायर करने से रोकता है |

तो इस ब्लॉग पोस्ट(MYSQL TABLE LOCKING IN HINDI) में हमने यह जाना कि किसी भी टेबल को lock और unlock…

…कैसे करना है जिससे कि हम sessions के द्वारा उनके access को control अथवा corporate कर सकते है |

You can also go through below given blog links related to sql and dbms:

MYSQL TABLE LOCKING IN HINDI…
InnoDB vs MyISAM In MYSQL Hindi…
MYSQL Storage Engines In Hindi…
Difference Between Primary Key and Unique Key In Hindi…
Stored Objects In MySql In Hindi…
BLOB vs TEXT IN MYSQL IN HINDI…
Stored Function vs Stored Procedure In MySql In Hindi…
Char vs Varchar In SQL In Hindi…
Difference Between MYSQL_CONNECT and MYSQL_PCONNECT In Hindi…
SQL Delete और Drop के बीच क्या अंतर है…
SQL में TRUNCATE और DELETE में क्या अंतर है…
SQL में Drop और Delete के बीच क्या अंतर है…
Delete, Drop, And Truncate Commands In Hindi…
SQL SELF JOIN IN HINDI…
SQL JOIN IN HINDI?/SQL JOIN क्या होता है…
Difference Between SQL And SQLite In Hindi…
What is the difference between SQL and MYSQL…
Difference between SQL and My SQL In Hindi…
SQL vs ORACLE In Hindi…
What is MYSQL In Hindi/ MySQL क्या है…

Quick Q&A:

What is table locking in MySQL? MYSQL में table locking क्या होता है?

MYSQL जो है वो अपने client sessions को table lock लगाने के लिए सक्षम बनाता है |

और ऐसा करके यह दूसरे सेशन को उस वक़्त टेबल पर कोई भी एक्शन करने के लिए रोक देता है|

जिस टाइम यह क्लाइंट उस टेबल को एक्सेस कर रहा होता है |

टेबल लॉक होने के कारण दूसरे सेशन cooperate करते है और जब तक client सेशन अपना काम खत्म…

… करके लॉक को रिलीज़ न कर दे तब तक यह session टेबल पर कोई भी modification ऑपरेशन परफॉर्म नहीं करते है अथवा कर सकते है|

mysql में टेबल लॉकिंग क्या है?

वैसे इसका technical आंसर आप ऊपर वाले question में जा कर देख सकते है |

यहाँ पर मै टेबल लॉकिंग को एक बहुत ही आसान example के साथ आपको समझाने का प्रयास करता हूँ|

आपने कई बार अपने आस पास सड़क पर repair अथवा नई सड़क बनने का काम होते हुए देखा होगा|

वैसे तो यह सड़क public सड़क होती है इस पर कोई भी आ या जा सकता है |

सड़क के किनारे कोई भी अपनी दुकान लगा सकता है|

पर जब भी इस पर कोई रिपेयरिंग का काम होता है तो सड़क को दोनों साइड से बंद कर दिया जाता है अथवा उसे लॉक कर दिया जाता है|

अब इस सड़क को सिर्फ कुछ रोड रिपेयर इंजीनियर ही access कर सकते है |

और एक बार जब वो सड़क के रिपेयर का काम खत्म कर देते है तो फिर इस सड़क को खोल दिया जाता है |

अब मान लीजिये अगर रोड रिपेयर करते समय इस पर लोग आ जाये तो फिर बहुत सारे काम ख़राब होने की आशंका होती है |

और लोगो भी चोट पहुँच सकती है |

और उसी तरह रोड के रिपेयर से पहले उस पर कोई sign अथवा white लाइन design बनाता है तो वो सब भी repair के समय डैमेज हो जाएगी|

बस ऐसा ही कुछ मयस्कल टेबल लॉकिंग सिस्टम होता है |

जब कोई client सेशन उसे एक्सेस करता है तो टेबल को लॉक कर दिया जाता है |

इससे और दूसरे सेशन टेबल पर कोई भी modification ऑपरेशन परफॉर्म नहीं कर पाते है |

और client आराम से अपने काम को खत्म करके टेबल लॉक को जरुरत पड़ने पर तुरंत ही रिलीज़ कर देता है|

How do I stop a MySQL table from locking? MYSQL table को locking से कैसे रोक सकते है?

इस सिंटेक्स को SQL report के end में लिख कर हम उस table को unlock कर सकते है जो कि रिपोर्ट execution के टाइम पर लॉक थी|

Syntax को आप नीचे देख सकते है:

UNLOCK TABLES; COMMIT;

How do check table locks in MySQL? MYSQL में table lock को कैसे चेक कर सकते है?

MYSQL में locked tables को हम निम्नलिखित कमांड की मदद से चेक कर सकते है:

SHOW OPEN TABLES

और इसके सबसे सिंपल फॉर्म में यह सारी locked tables को display कर देता है |

सभी ओपन tables जो है वो टेबल cache में listed रहती है |

और IN _USE कॉलम यह बताता है कि कौन कौन सी टेबल locked है |

What is table locking? Table locking से आप क्या समझते है?

यह Table locking सिस्टम एक तरह की mechanism होती है जो कि टेबल के साथ जुडी होती है |

और यह functionality जो है वो unauthorized users को टेबल का डाटा access करने से रोकती है |

MYSQL एक क्लाइंट सेशन को टेबल के ऊपर explicitly लॉक लगाने के लिए allow करता है |

इससे होता यह है कि उतने समय तक और सभी सेशन cooperate करते है और टेबल डाटा को एक्सेस नहीं कर सकते है |

इस ब्लॉग(MYSQL TABLE LOCKING IN HINDI) को लेकर आपके मन में कोई भी प्रश्न है तो आप हमें इस पते support@a5theory.comपर ईमेल लिख सकते है|

आशा करता हूँ, कि आपने इस पोस्ट(MYSQL TABLE LOCKING IN HINDI) को खूब एन्जॉय किया होगा|

आप स्वतंत्रता पूर्वक अपना बहुमूल्य फीडबैक और कमेंट यहाँ पर दे सकते है|MYSQL TABLE LOCKING IN HINDI|

आपका समय शुभ हो|

Anurag

I am a blogger by passion, a software engineer by profession, a singer by consideration and rest of things that I do is for my destination.