(1.3)mysql 事务控制和锁定语句

(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

猜你喜欢

转载自www.cnblogs.com/gered/p/10566665.html
1.3