前言
在记录这次线上问题之前,我们先来回顾一些基础知识。
数据库系统的锁
数据库系统使用锁是为了支持对共享资源进行访问,提供数据的完整性和一致性。
锁类型
InnoDB存储引擎中实现了如下两种标准的行级锁:
- 共享锁(S Lock),允许事务读一行数据
- 排他锁(X Lock),允许事务删除或者更新一条数据
如果一个事务t1已经获得了行r的共享锁,那么另外的事务t2也可以立即获得行r的共享锁。因为读取并没有改变r行的数据,成为这种情况为锁兼容(Lock Compatible)。但是若有其他事务t3想获得行r的排他锁,则必须等待t1,t2释放行r上共享锁,这种情况被称为锁不兼容。
如果想要查询数据的最新版本,可以使用当前读。当前读需要加锁,可以加读锁(select...lock in share mode),也可以加写锁(select...for update)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。