mysql锁机制之表锁(三)

 

表级别锁有三类:

(1)表锁:lock tables  xxx read/write

(2)DML锁:为了避免DML和DDL冲突,保证数据读写的正确性

  1. 增删改查的时候,加MDL读锁(共享);
  2. 当对表结构进行变更操作的时候,加MDL写锁(排他);

(3)意向锁:为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。(提高性能)

 

 

 

 

 

 

 

 

 

 

顾名思义,表锁就是一锁锁一整张表,在表被锁定期间,其他事务不能对该表进行操作,必须等当前表的锁被释放后才能进行操作。表锁响应的是非索引字段,即全表扫描,全表扫描时锁定整张表,sql语句可以通过执行计划看出扫描了多少条记录。

如何加表锁

MyISAM 在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁。

这个过程并不需要用户干预,因此,用户一般不需要直接用 LOCK TABLE 命令给 MyISAM 表显式加锁。

显示加锁:

  • 共享读锁:lock table tableName read
  • 独占写锁:lock table tableName write
  • 同时加多锁:lock table t1 write,t2 read
  • 批量解锁:unlock tables
posted @ 2018-06-17 14:55  igoodful  阅读(186)  评论(0编辑  收藏  举报