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;
上面的示例在解鎖表產品之前,任何外部連線都無法讀取產品表中的任何資料