Mysql 鎖

表鎖可以是 ENGINE=MyISAM 的重要工具,但對 ENGINE=InnoDB 很少有用。如果你想對 InnoDB 使用表鎖,則應重新考慮如何處理事務。

MySQL 使客戶端會話能夠顯式獲取表鎖,以便與其他會話協作以訪問表,或者防止其他會話在會話需要對其進行獨佔訪問期間修改表。會話只能為自己獲取或釋放鎖。一個會話無法獲取另一個會話的鎖定或釋放另一個會話持有的鎖定。

鎖可用於模擬事務或在更新表時獲得更快的速度。本節後面將對此進行更詳細的說明。

命令:LOCK TABLES table_name READ|WRITE;

你只能將鎖型別分配給單個表;

示例(READ LOCK):

LOCK TABLES table_name READ;

示例(WRITE LOCK):

LOCK TABLES table_name WRITE;

要檢視是否應用鎖定,請使用以下命令

SHOW OPEN TABLES;

要重新整理/刪除所有鎖,請使用以下命令:

UNLOCK TABLES;

例:

LOCK TABLES products WRITE:  
INSERT INTO products(id,product_name) SELECT id,old_product_name FROM old_products;
UNLOCK TABLES;

上面的示例在解鎖表產品之前,任何外部連線都無法將任何資料寫入產品表

例:

LOCK TABLES products READ:  
INSERT INTO products(id,product_name) SELECT id,old_product_name FROM old_products;
UNLOCK TABLES;

上面的示例在解鎖表產品之前,任何外部連線都無法讀取產品表中的任何資料