14.5.2.4 Locking Reads  锁定读:

如果你查询数据然后插入或者修改相关数据在相同的事务里, 常规的SELECT 语句不能给予足够的保护。

其他事务可以修改或者删除你刚查询相同的记录,InnoDB 支持2个锁定读的类型提供额外的安全:

/*******************

测试MYSQL RR 的重复读:

CREATE TABLE `t3` (
`sn` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增编号',
`phoneNo` int(11) DEFAULT NULL,
PRIMARY KEY (`sn`)); mysql> show create table t3;
+------- +------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------+
| Table | Create Table |
+------- +------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------+
| t3 | CREATE TABLE `t3` (
`sn` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增编号',
`phoneNo` int(11) DEFAULT NULL,
PRIMARY KEY (`sn`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+------- +------------------------------------------------------------------------------------------------------------------------------------------------------------ --------------------+
1 row in set (0.00 sec) Session 1:
mysql> start transaction;
Query OK, 0 rows affected (0.00 sec) mysql> select * from t3;
+----+---------+
| sn | phoneNo |
+----+---------+
| 1 | 11 |
| 2 | 22 |
+----+---------+
2 rows in set (0.00 sec) mysql> select * from t3;
+----+---------+
| sn | phoneNo |
+----+---------+
| 1 | 11 |
| 2 | 22 |
+----+---------+
2 rows in set (0.00 sec) Session 2: Database changed
mysql> delete from t3 where sn=2;
Query OK, 1 row affected (0.00 sec) mysql> commit;
Query OK, 0 rows affected (0.00 sec) 此时session 1看到的还是2条 表明RR是重复读 1.SELECT ... LOCK IN SHARE MODE 设置一个共享锁锁定在任何你要读的记录,其他session 只能读取记录, 因为不能修改它们直到你的事务提交。 如果任何其他记录被其他事务改变 没有被提交,你的查询等待直到那个事务借宿 然后使用最新的数据 mysql> select * from t3;
+----+---------+
| sn | phoneNo |
+----+---------+
| 1 | 11 |
| 2 | 22 |
+----+---------+
2 rows in set (0.00 sec) mysql> select * from t3 LOCK IN SHARE MODE; +----+---------+
| sn | phoneNo |
+----+---------+
| 1 | 11 |
| 2 | 99 |
+----+---------+
2 rows in set (4.78 sec) 看到的是最新的数据: mysql> select * from t3;
+----+---------+
| sn | phoneNo |
+----+---------+
| 1 | 11 |
| 2 | 22 |
+----+---------+
2 rows in set (0.00 sec) mysql> select * from t3 LOCK IN SHARE MODE;
+----+---------+
| sn | phoneNo |
+----+---------+
| 1 | 11 |
| 2 | 99 |
+----+---------+
2 rows in set (0.00 sec) 2. mysql> select * from t3 where sn=2 for update --看到的也是最新的记录
-> ; +----+---------+
| sn | phoneNo |
+----+---------+
| 2 | 99 |
+----+---------+
1 row in set (4.26 sec) mysql>
mysql> select * from t3;
+----+---------+
| sn | phoneNo |
+----+---------+
| 1 | 11 |
| 2 | 22 |
+----+---------+
2 rows in set (0.00 sec) 对于所有搜索遇到, SELECT ... FOR UPDATE locks 锁定记录和任何相关的index entries, 相当于你执行一个update语句对于那些记录。 其他事务是被堵塞的来更新那些记录,做 SELECT ... LOCK IN SHARE MODE, 或者从读取的数据在某些事务隔离级别。 一直读忽略任何锁设置在记录上(老的记录不能被锁定,它们是应用undo log重构的) 当 LOCK IN SHARE MODE and FOR UPDATE 查询的索引锁是被释放放事务是被提交或者回滚 锁定记录用于更新使用SELECT FOR UPDATE 只使用与当autocommit 被关闭(或者开始事务使用START TRANSACTION or by setting autocommit to 0. 如果自动提交启用,匹配的记录不会被锁定)

SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录的更多相关文章

  1. 深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE

    概念和区别 SELECT ... LOCK IN SHARE MODE走的是IS锁(意向共享锁),即在符合条件的rows上都加了共享锁,这样的话,其他session可以读取这些记录,也可以继续添加IS ...

  2. [MySQL] 行级锁SELECT ... LOCK IN SHARE MODE 和 SELECT ... FOR UPDATE

    一.译文 翻译来自官方文档:Locking Reads If you query data and then insert or update related data within the same ...

  3. lock in share mode 和 select for update

    lock in share mode 和 select for update 2018年07月11日 01:57:58 道不虚行只在人 阅读数 146    版权声明:欢迎转载,请注明出处 https ...

  4. 转 MYSQL SELECT ... FOR UPDATE and SELECT ... LOCK IN SHARE MODE Locking Reads

    原文: http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html In some circumstances, a consis ...

  5. 浅谈select for update 和select lock in share mode的区别

    有些情况下为了保证数据逻辑的一致性,需要对SELECT的操作加锁.InnoDB存储引擎对于SELECT语句支持两种一致性的锁定读(locking read)操作. . SELECT …… FOR UP ...

  6. SELECT LOCK IN SHARE MODE and FOR UPDATE

    Baronwrote nice article comparing locking hints in MySQL and SQL Server. In MySQL/Innodb LOCK IN SHA ...

  7. Select for update/lock in share mode 对事务并发性影响

    select for update/lock in share mode 对事务并发性影响 事务并发性理解 事务并发性,粗略的理解就是单位时间内能够执行的事务数量,常见的单位是 TPS( transa ...

  8. Mysql加锁过程详解(4)-select for update/lock in share mode 对事务并发性影响

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  9. (转载)Select for update/lock in share mode 对事务并发性影响

    select for update/lock in share mode 对事务并发性影响 事务并发性理解 事务并发性,粗略的理解就是单位时间内能够执行的事务数量,常见的单位是 TPS( transa ...

随机推荐

  1. Robolectric Test-Drive Your Android Code

    Running tests on an Android emulator or device is slow! Building, deploying, and launching the app o ...

  2. codevs1380 没有丧尸的舞会

    /* 树形DP 而然我并不知道树在哪(....) f[x][0]表示x节点不参加舞会 以x为根的子树的最优解 f[x][1]表示x节点参加舞会 以x为根的子树的最优解 方程为:(so为x的儿子 so要 ...

  3. enter 默认搜索

    onkeydown=" if(event.keyCode==13) Search(); "

  4. logic:present 和 logic:empty的用法 (转)

    logic:empty和logic:notEmpty logic:empty标签判断脚本变量是否为null,是否是一个空的字符串(长度为0),是否是一个空的collection或map(调用isEmp ...

  5. Win7设置承载网络 分类: 网络 2014-10-30 09:08 105人阅读 评论(0) 收藏

    Win7设置承载网络 (1)最重要的第一步,要知道自己的网卡是否支持承载网络,如果不支持就悲剧地一票否决了,支持的话才能开始以后各步骤的设置. netsh wlan show drivers (2)设 ...

  6. 将MVC中的Controllers、Model和View分别放到单独的项目中

    Model: 新建-项目-Windows-类库 MVCTest.Model Controller:新建-项目-Windows-控制台应用程序 MVCTest.Bussiness Views:新建-项目 ...

  7. oracle 查看用户表数目,表大小,视图数目等

    查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * fr ...

  8. Java study 2:The note of studying Socket which based TCP

    TCP concept: 传输控制协议(Transmission Control Protocol, TCP)是一种面向连接(连接导向)的.可靠的.基于字节流的运输层(Transport layer) ...

  9. (JAVA)从零开始之--对象输入输出流ObjectInputStream、ObjectOutputStream(对象序列化与反序列化)

    对象的输入输出流 : 主要的作用是用于写入对象信息与读取对象信息. 对象信息一旦写到文件上那么对象的信息就可以做到持久化了 对象的输出流: ObjectOutputStream 对象的输入流:  Ob ...

  10. 『重构--改善既有代码的设计』读书笔记----Substitute Algorithm

    重构可以把复杂的东西分解成一个个简单的小块.但有时候,你必须壮士断腕删掉整个算法,用简单的算法来取代,如果你发现做一件事情可以有更清晰的方式,那你完全有理由用更清晰的方式来解决问题.如果你开始使用程序 ...