文章目录
- 表级锁的分类
- 1、表锁(分类)
- 1.表共享读锁(read lock)
- 2.表独占写锁(write lock)
- 3.语法:
- 2、元数据锁(meta data lock )
- 3、意向锁
- 1.意向共享锁(IS):由语句 select ... lock in share mode添加
- 2.意向排他锁(IX):由 inser、update、delete、select...for update添加
表级锁的分类
1、表锁(分类)
表锁是锁住整张表,通过不同的表锁设置,控制并发访问。某些引擎不支持行锁,需要通过表锁来控制并发。支持行锁的引擎,就不建议使用表锁了。
1.表共享读锁(read lock)
只能进行读操作,不能进行写操作
第一个session窗口,对表进行读锁的情况下,会有错误的提示
其他session窗口中进行更新操作的时候会被阻塞:
当unlock tables时,读锁被释放,阻塞被释放,
2.表独占写锁(write lock)
当进行写锁的情况下:
当前会话session可以正常进行写入,读取等操作
,
但是其他会话session将无法进行读取和写入操作
,等写锁unlock tables被释放的情况下,将恢复正常的读写操作;
3.语法:
1.加锁:lock tables 表名....read/write
2解锁:unlock tables /客户端断开
2、元数据锁(meta data lock )
元数据锁主要是面向DML和DDL之间的并发控制,如果对一张表做DML增删改查操作的同时,有一个线程在做DDL操作,不加控制的话,就会出现错误和异常。元数据锁不需要我们显式的加,系统默认会加。
元数据锁的原理:
1.当做DML操作时,会申请一个MDL读锁
2.当做DDL操作时,会申请一个MDL写锁
3.读锁之间不互斥,读写和写写之间都互斥
3、意向锁
nnoDB支持多种粒度锁定,允许行锁和表锁并存。为了使在多个粒度级别上的锁定变得切实可行,InnoDB实现了意图锁。
意向锁是表级锁,表示事务稍后对表中的行需要上哪种类型的锁(共享锁或排他锁)。有两种类型的意图锁
1.意向共享锁(IS):由语句 select … lock in share mode添加
与表锁共享锁兼容,与表锁写入互斥
2.意向排他锁(IX):由 inser、update、delete、select…for update添加
与表锁共享锁及排它锁互斥,意向锁之间不会排斥