MySQL锁表与解锁语句
一、锁表
MySQL的表锁机制有两种:显示锁和隐式锁。
1、显式锁(Explicit Lock)
显示锁是一种用户可以显式地对表进行锁定的锁,为了锁定一个表,使用lock table命令,语法如下:
lock table table_name [READ | WRITE]
其中table_name是表名,[READ | WRITE]分别表示读锁和写锁,读锁允许其他连接读取数据,但不允许更新;写锁则不允许其他连接访问数据,除了申请写锁的连接可以进行表内更新操作。
例如:
lock table emp read;
lock table emp write;
2、隐式锁(Implicit Lock)
隐式锁是MySQL自动发出的,用于锁定表的一种锁。MySQL采用隐式锁可以在查询期内锁定表,避免其他连接并发访问,MySQL在执行INSERT、UPDATE、DELETE操作时会发出隐式锁,以避免数据发生非法更新。
二、解锁
解锁表非常简单,只需要使用unlock table命令即可:
unlock table table_name;
该命令可以解锁表,把显示锁和隐式锁均解除,其中table_name是表名。
示例:
unlock table emp;
要注意的是,当MySQL执行查询操作发出行级锁和表级锁时,只有在本次查询操作结束,MySQL 才会自动释放该次查询的所有锁,因此无法使用unlock table语句解锁。
总之,MySQL采用显示锁和隐式锁机制锁定表,用unlock table语句可以解除表锁,但如果查询操作产生了行级锁,则只有把该查询操作结束,MySQL才会自动释放该次查询的所有锁。