mysql如何做到可重复读

2023年 8月 10日 31.9k 0

MySQL的事务隔离级别分为4个:读未提交、读已提交、可重复读和串行化。在可重复读隔离级别下,MySQL如何保证数据的一致性,下面进行介绍。

可重复读隔离级别下,MySQL保证数据的一致性的关键是使用了多版本并发控制(MVCC)的技术。MVCC的核心思想是:每次修改数据的时候,不直接修改原始数据,而是将修改后的数据作为新版本存储起来。

在可重复读隔离级别下,每个事务都有自己的读视图,这个读视图是一个时间点的数据快照。读视图中包含了事务开启时已经存在的数据版本。当一个事务需要读取数据的时候,会使用自己的读视图来获取数据。在事务执行期间,它只能看到已经存在于读视图中的数据版本。

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
SELECT * FROM table WHERE name='John' FOR UPDATE;
UPDATE table SET age=age+1 WHERE name='John';
COMMIT;

以上是一个可重复读的事务,其中,先从table表中选取name为'John'的数据行并对该数据行加上行级锁,这样保证了其他事务无法更新该数据行;更新该数据行的age字段,然后提交事务。

总之,可重复读隔离级别下,MySQL使用MVCC技术保证数据的一致性。在事务执行期间,事务只能看到已经存在于自己读视图中的数据版本,保证了事务的隔离性;每个事务都有自己的读视图,这样每个事务读取的数据都是自己的数据,而不会影响其他的事务,从而保证了可重复读的特性。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论