InnoDB next-key locking
来源:互联网 发布:php简单后台html5源码 编辑:程序博客网 时间:2024/05/20 23:40
在 InnoDB 的行级锁定上使用一个称作 next-key locking 算法。在 InnoDB 在搜索或扫描表的索引时将进行行锁,它将在所访问到的索引上设置共享或排它的锁定。因而行锁是更加精确地而又称为索引记录锁定。
InnoDB 在索引记录上设置的锁同样会影响索引记录之前的“间隙(gap)”。如果一个用户对索引记录 R 加了一个共享或排它的锁定,那其它用户将不能在 R 之前立即插入新的记录。这种间隙锁定用于防止所谓的“phantom problem”。假设需读取和锁定表 CHILD
中标识符大于 100 的子行,并更新所搜索到的记录中某些字段。
SELECT * FROM CHILD WHERE ID > 100 FOR UPDATE;
假设表 CHILD
中有一个索引字段 ID
。我们的查询将从 ID
大于100的第一条记录开始扫描索引记录。 现在,假设加在索引记录上的锁定不能阻止在间隙处的插入,一个新的子记录将可能在事务处理中被插入到表中。 如果现在在事务中再次执行
SELECT * FROM CHILD WHERE ID > 100 FOR UPDATE;
在查询返回的记录集中将会有一个新的子记录。这与事务的隔离规则相违背的:一个事务必须能够顺串(run), 因而在事务处理中所读取的数据将不会发生改变。而新的 'phantom' 子记录将会打破这个隔离规则。
当 InnoDB 扫描索引时,它同样会锁定在索引中在结尾记录(the last record)之后的间隙。这仅仅在上例中会发生: InnoDB 设置的锁定将阻止任何 ID
大于 100 的插入。
在应用程序中可以通过一个 next-key locking 来实现一个唯一性(uniqueness)检查:如果以一个共享模式读取数据并没有发现与将要插入的数据存在重复值, 那么在读取过程中 next-key lock 将被设置在你的记录的后继者(successor)上,这将阻止其它用户在期间插入相同的记录,因而你可以安全地插入你的记录。 所以, next-key locking 可以允许你 'lock' 你的表中并不存在的记录。
- InnoDB next-key locking
- mysql innodb next-key locking
- 浅谈InnoDB的next-key locking策略
- mysql next-key locking
- Db2中的Next-key locking
- 浅析 innodb next-key lock
- innodb next-key lock解析
- 浅析 innodb next-key lock
- innodb next-key lock解析
- innodb next-key lock解析
- Innodb锁机制:Next-Key Lock 浅谈
- Innodb锁机制:Next-Key Lock 浅谈
- Innodb锁机制:Next-Key Lock 浅谈
- innodb的记录锁、gap锁、next-key锁
- innodb的记录锁、gap锁、next-key锁
- 14.2.2.4 InnoDB Record, Gap, and Next-Key Locks
- 理解innodb的锁(record,gap,Next-Key lock)
- MYSQL锁之InnoDB record,gap and next-key locks
- 图片下载简单处理
- 传入两个中文地点,解析成坐标点,并且在地图上显示出它们之间的路线图
- 汉诺塔的非递归算法
- NSNotificationCenter 的使用详解
- wordpress只有主页能访问,其他菜单不能访问 Custom Permalinks Return 404 Errors
- InnoDB next-key locking
- ReentrantLock实现探究
- Android 让子线程更新UI
- 整理-分类-朴素贝叶斯分类-垃圾邮件检测
- JS计算浮点数加减乘除精确数值的方法
- iOS 夜间模式的简单实现
- MVC缓存
- android工厂类
- 前端框架你究竟选什么