# 查看锁信息
select * from performance_schema.data_lock_waits;
读锁:也称为共享锁、英文用S 表示。针对同一份数据,多个事务的读操作可以同时进行而不会互相影响,相互不阻塞的。
写锁:也称为排他锁、英文用X 表示。当前写操作没有完成前,它会阻断其他写锁和读锁。这样就能确保在给定的时间里,只有一个事务能执行写入,并防止其他用户读取正在写入的同一资源。
读时可以加共享锁也可以加排他锁;
写时只能加排他锁;
开启共享锁S:
begin;
select * from account lock in share mode;
# ...
commit;
开启排他锁X:
begin;
select * from account for update;
# ...
commit;
S锁与S锁相互兼容
S锁与X锁不兼容
X锁与X锁不兼容
可以很好的避免死锁。
innodb支持行级锁,因此通常不会选择表级锁。但在一些场景中,如在其他会话中改变表结构,对表执行ddl操作,也会发生阻塞,这时用到server层提供的元数据锁结构(英文名: Metadata Locks ,简称MDL