第八章第一节 一致性锁定读
一致性锁定读
InnoDB存储引擎支持加锁语句,即使对于SELECT的只读操作。其中,SELECT ...FOR UPDATE
对读取的记录加一个X锁,其他事务不能再对该行加上任何锁;SELECT ... LOCK IN SHARE MODE
对读取的记录加一个S锁,其他事务可以对该行加S锁,但不能加X锁。
锁的算法
- Record Lock:单个行记录的锁;
- Gap Lock:间隙锁,锁定一个范围,但不包含记录本身;
- Next-Key Lock:锁定一个范围+单个行记录的锁;
Next-Key Locking机制使InnoDB存储引擎避免了幻象问题:在同一事务下,连续执行两次同样的SQL语句可能导致不同的结果。
锁问题
脏读
一个事务可以读到另外一个事务未提交的数据。
不可重复读
在一个事务中对某数据的两次读取之间,由于其他事务的修改,使得两次读取的数据不一样;注意,这里不可重复读读到的是已经提交的数据。
丢失更新
一个事务的更新操作被另一事务的更新操作覆盖。要避免更新丢失,需要让事务在这种情况下的操作变成串行化,而不是并行的操作。