(1.3)mysql 事务控制和锁定语句
lock table 参考转载自:https://www.cnblogs.com/kerrycode/p/6991502.html
关键词:mysql lock table 和 unlock tables,mysql事务控制
1、mysql lock table 和 unlock table
【1.1】一般形式:lock table tbl_name read/write :当前会话锁定表,仅当前会话可操作
LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} [, tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE}] ... LOCAL修饰符表示可以允许在其他会话中对在当前会话中获取了READ锁的的表执行插入。但是当保持锁时,若使用Server外的会话来操纵数据库则不能使用READ LOCAL。另外,对于InnoDB表,READ LOCAL与READ相同。
修饰符LOW_PRIORITY用于之前版本的MySQL,它会影响锁定行为,但是从MySQL 5.6.5以后,这个修饰符已经被弃用。如果使用它则会产生警告。
(1)read:添加会话级别共享锁,所有会话只能读,不能写;否则就会报“Table 'test' was locked with a READ lock and can't be updated”这样的错误,其它会话也可用这种办法在该表获取一个READ锁。
(2)write:添加会话级别排它锁,仅加锁会话可以读写,其他会话连读都不能读,只能锁等待
(3)锁定多个表:lock tables test read, worklog read;
注意:
(1)如果当前会话如果锁定了其中一个表,那么是无法查询其它表的。否则会报“ERROR 1100 (HY000): Table 'worklog' was not locked with LOCK TABLES”错误。
(2)对于VIEW加锁,LOCK TABLES语句会为VIEW中使用的所有基表加锁。
对触发器使用LOCK TABLE,那么就会锁定触发器中所包含的全部表(any tables used in triggers are also locked implicitly)
【1.2】什么时候释放拥有的锁
(1)使用unlock tables; (2)断开会话连接时; (3)显示开启事务时; (4)当会话发出另外一个LOCK TABLES时;
2、事务控制
【2.1】chain与release
(1)chain:定义事务提交或回滚之后,立即启动一个与刚才事务同一个隔离级别的新事务。
使用办法:commit and chain / rollback and chain