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;

上面的示例在解锁表产品之前,任何外部连接都无法读取产品表中的任何数据