MySQL-এ একসাথে একাধিক টেবিল লক করতে LOCK TABLES কমান্ড ব্যবহার করুন।
সিনট্যাক্স
LOCK TABLES table1 WRITE, table2 WRITE, table3 READ, ...;
WRITE- এক্সক্লুসিভ লক (রিড/রাইট উভয় ব্লক)READ- শেয়ার্ড লক (রিড অনুমতি, রাইট ব্লক)
উদাহরণ
CREATE TABLE OrderDemo (
OrderId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
OrderPrice INT,
OrderDateTime DATETIME
);
-- দুইটি টেবিল লক
LOCK TABLES OrderDemo WRITE, utfdemo WRITE;
লক সক্রিয় থাকতে নতুন টেবিল তৈরি করা যাবে না
CREATE TABLE LockTableDemo (UserId INT); -- ERROR 1100 (HY000): Table 'LockTableDemo' was not locked with LOCK TABLES
লক রিলিজ
UNLOCK TABLES;
গুরুত্বপূর্ণ সীমাবদ্ধতা
- ট্রানজ্যাকশন-সেফ নয়: LOCK TABLES এক্টিভ ট্রানজ্যাকশন কমিট করে
- সেশন-স্কোপড: কানেকশন বন্ধ হলে অটো আনলক
- রিপ্লিকেশন সমস্যা: ROW-based রিপ্লিকেশনে সমস্যা হতে পারে
- পারফরম্যান্স: কাঙ্কারেন্সি কমায়
আধুনিক বিকল্প
রো-লেভেল লকিং için SELECT ... FOR UPDATE বা SELECT ... LOCK IN SHARE MODE ট্রানজ্যাকশনের ভিতরে ব্যবহার করুন।
START TRANSACTION; SELECT * FROM OrderDemo WHERE OrderId = 1 FOR UPDATE; -- শুধু এই রো লক থাকবে COMMIT;