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,且听下回分享

时间: 2024-11-08 20:13:16

Select 你知多少的相关文章

html select 标签知多少

select标签做应用层程序开发的肯定都用到过.有的时候老是忘记里面的一些东西,写出来了,自己查就方便了.看个例子 Java代码   <html>   <head>   <meta http-equiv="Content-Type" content="text/html; charset=utf8">   <title>select example</title>   </head>   <

pt-table-checksum原理详解

环境 MySQL: MySQL 5.6.27 OS: centos 6.6 tool: pt-table-checksum 2.2.15 它能做什么 业界最流行的MySQL主从数据对比工具,数据一致性检测最好的的工具,没有之一 如何使用 ./pt-table-checksum -hxx -P 3306 -u backup -p backup --no-check-binlog-format --databases=xx_db,yy_db,zz_db --no-check-replication-

javascript 动态设置已知select的option的value值的代码_表单特效

复制代码 代码如下: funtion setSelectOption(a,b){//a =>select 的id名,b=>已知option的值 for (i=0;i<$(a).length;i++) //$(a)获取a的id的简单写法,前提是必须用引用prototype.js if($(a).options[i].value == b){//遍历select $(a).options[i].selected=true;//选中特定值 break; }

如何用SQL语句来判断已知表是否存在

如何判断库中已知表是否存在今日受人之托,帮他解决这个问题,代码为通常的引用Dao做的一模块: Function fExistTable(strTableName As String) As IntegerDim db As DatabaseDim i As Integer Set db = DBEngine.Workspaces(0).Databases(0) fExistTable = False db.TableDefs.Refresh For i = 0 To db.TableDefs.C

SELECT 赋值与ORDER BY冲突的问题

问题描述: 使用 SELECT 语句,轮询表中的数据,并且处理变量数据时,如果有ORDER BY语句,则得不到想要的结果,但去掉ORDER BY,结果正常. 具体的问题表现参考下面的问题重现代码  问题重现代码 -- 测试数据DECLARE @T TABLE(id int,value nvarchar(16))INSERT INTO @T SELECT 1,   N'好人' UNION ALL SELECT 2,   N'坏人' UNION ALL SELECT 3,   N'吃饭' UNION

MySQL 4.1.0 中文参考手册 --- 6.3 用于 SELECT 和 WHERE 子句的函数 (2)

mysql|select|参考|参考手册|函数|中文 MySQL 4.1.0 中文参考手册 --- 犬犬(心帆)翻译 MySQL Reference Manual for version 4.1.0-alpha. 6.3.4 日期和时间函数 对于每个类型的值范围以及日期和时间值有效指定格式,请查看章节 6.2.2 Date 和 Time 类型. 这里是一个使用日期函数的例子.下面的查询选择所有 date_col 值在最后 30 天内的记录. mysql> SELECT something FRO

必知技巧:ASP.NET中常用的优化性能方法详解

asp.net|技巧|详解|性能|优化 1. 数据库访问性能优化 数据库的连接和关闭 访问数据库资源需要创建连接.打开连接和关闭连接几个操作.这些过程需要多次与数据库交换信息以通过身份验证,比较耗费服务器资源.ASP.NET中提供了连接池(Connection Pool)改善打开和关闭数据库对性能的影响.系统将用户的数据库连接放在连接池中,需要时取出,关闭时收回连接,等待下一次的连接请求. 连接池的大小是有限的,如果在连接池达到最大限度后仍要求创建连接,必然大大影响性能.因此,在建立数据库连接后

SQL语句判断已知表是否存在

  怎样用SQL语句来判断已知表是否存在 答:具体解决方法如下: 注释:以下代码为通常的引用Dao做的一模块 Function fExistTable(strTableName As String) As Integer Dim db As Database Dim i As Integer Set db = DBEngine.Workspaces(0).Databases(0) fExistTable = False db.TableDefs.Refresh For i = 0 To db.T

开发 Electron app 必知的 4 个 tips

本文讲的是开发 Electron app 必知的 4 个 tips, Electron ,是包括 Avocode 在内的众多 app 采用的技术,能让你快速实现并运行一个跨平台桌面应用.有些问题不注意的话,你的 app 很快就会掉到"坑"里.无法从其它 app 中脱颖而出. 这是我 2016 年 5月 在 Amsterdam 的 Electron Meetup 上演讲的手抄版,加入了对 api 变化的考虑.注意,以下内容会很深入细节,并假设你对 Electron有一定了解. 首先,我是