MySQL 幻读怎么解决?


本文摘自PHP中文网,作者Guanhui,侵删。

MySQL 幻读怎么解决?

1、MVCC快照,将历史数据存一份快照,在其事务增加与删除数据时,保证当前事务来说是不可见的;

多数数据库都实现了多版本并发控制,并且都是靠保存数据快照来实现的。

以 InnoDB 为例,每一行中都冗余了两个字断。一个是行的创建版本,一个是行的删除(过期)版本。版本号随着每次事务的开启自增。事务每次取数据的时候都会取创建版本小于当前事务版本的数据,以及过期版本大于当前版本的数据。

普通的 select 就是快照读。

1

select * from T where number = 1;

2、“next-key”锁,将当前数据行与上一条数据和下一条数据之间的间隙锁定,保证此范围内读取的数据是一致的。

next-key 锁包含两部分

  • 记录锁(行锁)

  • 间隙锁

记录锁是加在索引上的锁,间隙锁是加在索引之间的。(思考:如果列上没有索引会发生什么?)

1

2

3

4

5

select * from T where number = 1 for update;

select * from T where number = 1 lock in share mode;

insert

update

delete

推荐教程:《MySQL教程》

以上就是MySQL 幻读怎么解决?的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

mysql中min()和least()的区别

mysql安装与卸载详细教程

mysql实现linux下数据库目录迁移

mysql如何创建多个联合索引

mysql的学习笔记

mysql怎么删除表中的某一字段

mysql中utf8_unicode_ci、utf8_general_ci有什么区别?

如何使用mysql中bin()函数?

mysql的case方法使用好处是什么

mysql用navicat导出数据字典的方法介绍

更多相关阅读请进入《mysql》频道 >>


数据库系统概念 第6版
书籍

数据库系统概念 第6版

机械工业出版社

本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...