千家信息网

Repeatable-Read及Read-Committed有哪些区别

发表于:2025-11-14 作者:千家信息网编辑
千家信息网最后更新 2025年11月14日,这篇文章主要为大家展示了"Repeatable-Read及Read-Committed有哪些区别",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Repeat
千家信息网最后更新 2025年11月14日Repeatable-Read及Read-Committed有哪些区别

这篇文章主要为大家展示了"Repeatable-Read及Read-Committed有哪些区别",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"Repeatable-Read及Read-Committed有哪些区别"这篇文章吧。

mysql 默认提供的是 Repeatable-Read 可重复读,更适用于oltp
Read-Committed 不可重复读 也可以叫做提交读
在MySQL中基本有这两种事务隔离级别的设置,默认的RR(Repeatable-Read)和实际中常见的RC(Read-Committed)。两者区别是什么,怎么正确理解,用几个SQL语句就能说明白,就用简单的实验来说明白。

我们开始吧。

首先创建一个测试表test,插入一些数据。

create table test( id int primary key,name varchar(30),memo varchar(30));
insert into test values(1,'name1','aaaa'),(2,'name2','aaaa'),(3,'name3','aaaa'),(4,'name4','aaaa'),(5,'name5','aaaa'); 很多情况下,我们会把隔离级别从默认的RR修改为RC,这也是其它很多数据库默认的事务隔离级别。

我们打开两个窗口,来对比关联测试。


RC模式下的测试

1

窗口1

>show variables like 'tx_isolation';
+---------------+----------------+
| Variable_name | Value |
+---------------+----------------+
| tx_isolation | READ-COMMITTED |
+---------------+----------------+
1 row in set (0.01 sec)

>begin; --开启事务
>select *from test; --查看数据
+----+-------+------+
| id | name | memo |
+----+-------+------+
| 1 | name1 | aaaa |
| 2 | name2 | aaaa |
| 3 | name3 | aaaa |
| 4 | name4 | aaaa |
| 5 | name5 | aaaa |
+----+-------+------+
5 rows in set (0.00 sec)

2

窗口2

begin; --开启事务
>update test set name='aaaaa' where id=2; --修改一条记录
Query OK, 1 row affected (0.06 sec)
Rows matched: 1 Changed: 1 Warnings: 0
>commit; --提交事务
Query OK, 0 rows affected (0.01 sec)

1

窗口1

>select *from test; --查看窗口1中的数据,就会发现原来窗口的数据发生了变化,这是不可重复读的一个典型例子。
+----+-------+------+
| id | name | memo |
+----+-------+------+
| 1 | name1 | aaaa |
| 2 | aaaaa | aaaa |
| 3 | name3 | aaaa |
| 4 | name4 | aaaa |
| 5 | name5 | aaaa |
+----+-------+------+
5 rows in set (0.00 sec)

RR模式下的测试

再来看看RR这个隔离级别,其实有了上面的测试,就相对有底了。这是MySQL默认的隔离级别,会出现幻读的情况。

1

窗口1

首先修改隔离级别从RC到RR

>set global transaction isolation level repeatable read;
Query OK, 0 rows affected (0.00 sec)
?查看事务隔离级别。
>show variables like 'tx_isolation';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)

>begin; --开启事务
>select *from test; --查看表test的数据。
+----+-------+------+
| id | name | memo |
+----+-------+------+
| 1 | name1 | aaaa |
| 2 | aaaaa | aaaa |
| 3 | name3 | aaaa |
| 4 | name4 | aaaa |
| 5 | name5 | aaaa |
+----+-------+------+
5 rows in set (0.00 sec)

2

窗口2

>begin; --开启事务
>update test set name='RR_test'; --修改表test的数据,所有记录都发生变化。
Query OK, 5 rows affected (0.01 sec)
Rows matched: 5 Changed: 5 Warnings: 0
>commit; --提交事务
Query OK, 0 rows affected (0.00 sec)

1

窗口1


>select *from test; --在RR模式下,窗口1中的事务因为还没有提交,看到的还是原来的数据。
+----+-------+------+
| id | name | memo |
+----+-------+------+
| 1 | name1 | aaaa |
| 2 | aaaaa | aaaa |
| 3 | name3 | aaaa |
| 4 | name4 | aaaa |
| 5 | name5 | aaaa |
+----+-------+------+
5 rows in set (0.00 sec)
>commit; --我们提交窗口1的事务
Query OK, 0 rows affected (0.00 sec)
>select *from test; --再次查看数据就发生了变化,实际上窗口1中没有任何的DMl操作。
+----+---------+------+
| id | name | memo |
+----+---------+------+
| 1 | RR_test | aaaa |
| 2 | RR_test | aaaa |
| 3 | RR_test | aaaa |
| 4 | RR_test | aaaa |
| 5 | RR_test | aaaa |
+----+---------+------+
5 rows in set (0.00 sec)

以上是"Repeatable-Read及Read-Committed有哪些区别"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

事务 数据 级别 隔离 测试 内容 模式 篇文章 变化 实际 情况 这是 学习 帮助 两个 例子 典型 再次 实际上 常见 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 8路服务器价格 大荔免费的外贸数据库系统 安康市网络安全宣传周启动 吉林省软件开发系统价目表 数据库订单表总价如何实现 软件开发github 大学的网络安全专业全靠自学吗 深圳计算机应用软件开发定制 嵌入式的数据库语言结构 wifi无线网络技术教学 山东青岛卓尔软件开发 烟草网络安全培训 育才小学网络安全教育 软件开发内测公测评估 图书馆数据库资源的重要性 英文名字翻译软件开发 远程租服务器安全吗 软件开发工程师的电脑配置 老头环登不上游戏服务器 数据库中什么叫键 以下哪些不属于万方数据库 网络安全标语卡片制作 工行软件开发中心在哪上班 网络安全知识竞赛服务器失误 连接服务器身份验证失败 克拉玛依软件开发网上价格 人工智能软件开发课程 网络安全工程师工作需要什么东西 数据库怎么创键一个表 linux个人服务器应用
0