首页
万乐荣
mysql深入学习笔记及实战指南
锁定读
讨论区
页面树
mysql知识体系以及学习经验
mysql学习资料下载
英文资料
mysql基础知识
Mysql文件物理组成
mysql表结构设计
基础的sql语句以及函数
安全性
sql注入
深入理解mysql的权限系统
mac下的常用操作
mysql的运维
用户管理
备份与还原数据
进行数据库维护
查看日志文件
mysql调优
创建高性能索引
InnoDb索引实现
高性能索引策略
三星索引
QUBE索引性能分析
query优化
连接优化
内存使用
查询缓存优化
日志设置优化
Innodb存储引擎优化
mysql内部原理深度解析
mysql连接原理
InnoDb存储引擎概念与原理
InnoDb介绍
使用Innodb表的好处
InnoDB表的最佳实践
InnoDB和ACID模型
InnoDB多版本
InnoDb架构
缓存池
更改缓冲区
自适应哈希索引
redo log缓冲区
系统表空间
InnoDb数据字典
双写缓冲区
回滚日志 undo-log
file-per-table 表空间
重做日志-redo log
InnoDb锁和事务模型
InnoDb 锁
InnoDb事务模型
事务的隔离级别
autocommit, Commit, and Rollback
锁定读
幻读 phantom read
死锁
InnoDb配置
配置innoDb为只读操作
innoDb缓存池配置
innodb缓存池
mysql使用中常见的问题
mysql清空表并重置表记录主键id的方法
mysql字符编码错误,导致中文全部变问号
实战应用
mysql秒杀应用
mysql悲观锁和乐观锁
简介
锁定读 Locking Reads
锁定读
Locking Reads
如果你在同一个事务里 查询rows,并且insert or update相关的rows。常规的select语句不能给到足够的保护(因为innodb默认是不锁定读,是快照读。)另一个事务可以update or delete 相同的rows。
(你刚刚查询出来的rows,可能已经被其他的事务修改了,不是最新的rows,而是过期的。)
Innodb 支持两种类型的锁定读来提供额外的安全。
SELECT ... FOR SHARE
给任何被读到的行设置一个共享锁。其他的会话(事务)只能读取这些行,不能修改他们,除非当前事务已经提交了。
如果这些行被另一个事务B修改了,并且事务B还没有提交。那么,你的查询会一直等待,直到事务B结束之后,你才可以查询到最新的值。
SELECT ... FOR UPDATE
被查询的rows,会被上写锁(排他锁),就像在这些行上执行了update语句一样。其他的事务,无法update这些rows,也无法select in share mode。
但是可以在read repeated(consistent reads)隔离级别上select,因为是不加锁的快照读。
上一篇:
autocommit, Commit, and Rollback
下一篇:
幻读 phantom read
成为你想看到的世界变革力量
赞赏支持
创建者:
万乐荣
最后更新时间 : 2017年11月8日 16:34
评论
发 表