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;
上面的示例在解锁表产品之前,任何外部连接都无法读取产品表中的任何数据