#mysql

故宫角楼

本文参考Mysql官方文档

共享锁和排它锁

  • 共享锁(shared locks:s lock)
  • 排它锁(exclusive locks:x lock)

意向锁(intention locks)- 表级别

  • 共享意向锁(intention shared lock -> IS)
  • 排他意向锁(intention exclusive lock -> IX)

意向锁与行锁间的关系

X IX S IS
X Conflict Conflict Conflict Conflict
IX Conflict Compatible Conflict Conflict
S Conflict Conflict Compatible Compatible
IS Conflict Compatible Compatible Compatible

意向锁注意事项

  • 事务申请一个表中某行记录的共享锁前,必须申请该表的IS lock或更强的锁
  • 事务申请一个表中某行记录的排他锁前,必须申请该表的IX lock
  • 意向锁只阻塞表级别的加锁请求(for example, LOCK TABLES ... WRITE)。意图锁主要是为了表明某些客户端正在或将要锁住表中的某一行。

记录锁(record lock)

记录锁也叫做行锁,是用来在一条索引记录上加锁来实现。例如SELECT c1 FROM t WHERE c1 = 10 FOR UPDATE; 会阻止其他事务插入、更新或删除t.c1值为10的数据行。

记录锁通常通过锁住索引记录来实现,即便一个mysql的table没有定义索引,在这种情况下InnoDB会创建一个隐藏的索引来用该索引来加记录锁。See Section 15.6.2.1, “Clustered and Secondary Indexes”.

阅读更多

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×