1.元数据锁
查看元数据锁
select object_type,object_scheme,object_name,lock_type,lock_duration from perfomance_scheme.metadata_locks;
2.意向锁
线程A开启事务后在执行update更新语句时候,会给数据加上行锁,加上行锁以后,会对整张表加上意向锁。
线程B来给整张表加上表锁时,会先检查这张表的意向锁,通过意向锁来决定它能不能对这张表加锁成功,如果加的表锁和当前这张表的意向锁是兼容的,那么直接会给这张表加锁,如果当前要加的锁和这张表的意向锁不兼容,那此时线程B将会出于阻塞状态,一直阻塞到线程A将事务提交,行锁释放,意向锁释放之后,线程B将解除阻塞状态。
线程1中:
#开启事务
begin;
select * from score where id = 1 lock in share mode;
线程2中查看表中的意向锁,和执行完sql语句加的行锁,此行锁为共享锁
select object_scheme,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;
IS意向共享锁和表锁里面的读锁是兼容的,和表锁里面的写锁是互斥的。
意向锁存在它的作用就是,在innodb引擎当中加的行锁和表锁之间的冲突问题。