表级锁

对整个表加的锁

意向锁

为什么要有这锁?

如果A对表中的一行上了写锁,这时B对表上了写表锁,表示表里面的每一行都可以修改,这时就矛盾了

虽然B在申请表锁你可以遍历每一行,但这不太现实。

故意向锁就是为了解决这种不同锁粒度之间的并发性问题,有了这锁后,在给表上表锁,就可以直接判断

是否有事务对表中的数据进行操作

意向锁不是锁资源,只是一个通知,且锁是由mysql管理的

上行级共享锁时会先给表上一独占意向锁,上行级独占锁时会先给表上一共享意向锁

意向共享锁和意向独占锁不冲突,但他两和表锁互斥(共享读表锁和意向共享锁不互斥)

元数据锁(字典锁)

锁定表的结构数据,防止DDL和DML、DQL起冲突

当进行CURD时,就会给表上 元数据读锁

当进行DDL时即想要修改表的结构时,就会给表上 元数据写锁

元数据锁在事务提交后自动释放

申请元数据锁的事务会进入一个队列,如果出现了申请元数据写锁的请求,就会阻塞后续的事务

AUTO-INC锁

保证自增主键能连续自增的锁

当事务执行insert的时候就会给表上这个锁

5.6之前,这个锁的粒度比较大,当事务提交时才会释放,即即使insert后无insert操作了,也不会释放,直到

事务提交

5.6后,事务中的每一次insert结束后就会释放锁( 插入多行数据时,会加一次自增锁并一次性分配一段连续

ID )

表级排他or共享锁

lock table read 给表上读锁

lock table write 给表上写锁

unlock table 释放当前会话中拥有的所有的锁,会话取消也是会自动释放