Select 你知多少

简介:

一致性锁定读 vs 一致性非锁定读

基本概念

  • 什么是一致性非锁定读

select,不加锁的读

  • 什么是一致性锁定读

select xx for update , 加锁的读。
读取的是最新的数据

  • 什么是幻影读

同一个事务中,两次一致性锁定读得到的结果不一样,说明产生了幻影读

可见性测试一( 针对 一致性非锁定读 )

  • set global tx_isolation='READ-COMMITTED'

事务一: begin; select * from lc

root:test> begin;select * from lc;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+

事务二:



root:test>begin; insert into lc values(3);
Query OK, 1 row affected (0.00 sec)

root:test> commit ;
Query OK, 0 rows affected (0.00 sec)

事务一:

root:test> select * from lc;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)

总结: RC模式,一致性非锁定读,是可以看见已经提交的事务的,所以RC模式是可提交读。
同理: RR模式,一致性非锁定读,是不可以看见已经提交的事务的,所以RR模式是可重复读。

可见性测试二( 针对 一致性锁定读 )

  • set global tx_isolation='READ-COMMITTED'

事务一: begin; select * from lc

root:test> begin;select * from lc for update;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+

事务二:



root:test>begin; insert into lc values(3);
Query OK, 1 row affected (0.00 sec)

root:test> commit ;
Query OK, 0 rows affected (0.00 sec)

事务一:

root:test> select * from lc for update;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
3 rows in set (0.00 sec)
  • set global tx_isolation='REPEATABLE-READ'

事务一: begin; select * from lc

root:test> begin;select * from lc for update;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+

事务二:



root:test>begin; insert into lc values(3);  --被事务一的for update锁住了

事务一:

root:test> select * from lc for update;
+------+
| id   |
+------+
|    1 |
|    2 |
+------+
2 rows in set (7.48 sec)

总结: RC模式,同一个事务中,执行多次一致性锁定读,得到的结果不一样。所以RC模式存在幻影读的现象。
同理: RR模式,同一个事务中,执行多次一致性锁定读,得到的结果一样。 所以RR模式不存在幻影读的现象。
原理: 产生幻影读的原理,跟gap lock & next key lock 相关,如果想知道什么是gap lock & next key lock,且听下回分享

目录
相关文章
|
SQL 关系型数据库 MySQL
Mysql数据库第十三课-----------sql语句的拔高3--------直冲云霄
Mysql数据库第十三课-----------sql语句的拔高3--------直冲云霄
|
SQL 关系型数据库 MySQL
深聊MySQL,从入门到入坟之:如何让order by、group by查询速度飞起来
深聊MySQL,从入门到入坟之:如何让order by、group by查询速度飞起来
128 0
|
SQL 关系型数据库 MySQL
MySQL数据库第十一课---------SQl语句的拔高-------水平提升
MySQL数据库第十一课---------SQl语句的拔高-------水平提升
|
关系型数据库 MySQL
最基础,MySQL基础查询SELECT
最基础,MySQL基础查询SELECT
100 0
最基础,MySQL基础查询SELECT
|
数据库
【硬着头皮】 你别查询了,不就id么?
【硬着头皮】 你别查询了,不就id么?
102 0
【硬着头皮】 你别查询了,不就id么?
|
SQL 存储 关系型数据库
小胖问我:group by 怎么优化?(下)
小胖问我:group by 怎么优化?
小胖问我:group by 怎么优化?(下)
|
SQL 架构师 关系型数据库
小胖问我:group by 怎么优化?(上)
哈喽,我是狗哥,好久不见呀!是的,我又又换了工作。最近一直在面试这几天刚好整理下在面试中被问到有意思的问题,也借此机会跟大家分享下。
小胖问我:group by 怎么优化?(上)
|
关系型数据库 MySQL 数据库
【MySQL作业】SELECT 数据查询——美和易思select 选择列表应用习题
【MySQL作业】SELECT 数据查询——美和易思select 选择列表应用习题
129 0
【MySQL作业】SELECT 数据查询——美和易思select 选择列表应用习题
|
关系型数据库 MySQL 数据库
【MySQL作业】分组查询 group by 子句——美和易思分组查询应用习题
【MySQL作业】分组查询 group by 子句——美和易思分组查询应用习题
151 0
【MySQL作业】分组查询 group by 子句——美和易思分组查询应用习题