14.3.2.4 Locking Reads 锁定读
14.3.2.4 Locking Reads 锁定读 如果你的查询数据,然后插入或者更新相关的数据 在同一个事务, 普通的SELECT 语句不足以给予足够保护。 其他事务可以更新或者删除相同的你要查询的记录,InnoDB 支持2种类型的锁定读,提供额外的安全: 1.SELECT ... LOCK IN SHARE MODE 设置一个共享的lock 在任何被读取的记录上。 其他会话可以读记录, 但是不能修改它们直到你的事务提交。 如果这些行中的任何记录被其他会话修改,而没有提交, 你的查询等待直到事务结束,然后使用最新的值。 Session 1: mysql> update t5 set id=200 where id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0 Session 2: mysql> select * from t5 LOCK IN SHARE MODE;--Hang 对于index records 搜索遇到的,, SELECT ... FOR UPDATE 锁定记录和相关的index entries, 和你执行一个UPDATE 语句一样。其他的事务会被更新堵塞, SELECT ... LOCK IN SHARE MODE,或者读取数据在某个事务隔离级别。 一致性读忽略任何locks 设置在记录上(老本本的记录不会被锁定,它们是通过应用undo logs 来构建) 那些语句是有用的当处理树形结构或者结构化数据, 无论是在单个表里 或者 分散到多个表。 你遍历边缘或者树的分支从一个地方到另一个地方 所有的锁通过LOCK IN SHARE MODE and FOR UPDATE 查询会被释放当事务提交或者回滚 注意: 锁定记录 使用 SELECT FOR UPDATE 只应用在当自动提交关闭时(或者通过开始事务 START TRANSACTION 或者 setting autocommit to 0 如果自动提交被启用,匹配的记录不会被锁定 测试: mysql> show variables like '%commit%';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| autocommit | ON CREATE TABLE `t5` (
`sn` int(11) NOT NULL AUTO_INCREMENT,
`id` int(11) DEFAULT NULL,
`info` varchar(40) DEFAULT NULL,
PRIMARY KEY (`sn`),
UNIQUE KEY `t5_idx1` (`id`)
) 自动提交开启情况下: Session 1: mysql> select * from t5;
Empty set (0.00 sec) mysql> insert into t5(id,info) values(1,'a1');
Query OK, 1 row affected (0.00 sec) Session 2: mysql> select * from t5;
+----+------+------+
| sn | id | info |
+----+------+------+
| 1 | 1 | a1 |
+----+------+------+
1 row in set (0.00 sec) mysql> 自动提交 /***手工开启事务: Session 1: mysql> START TRANSACTION ;
Query OK, 0 rows affected (0.00 sec) mysql> insert into t5(id,info) values(2,'a2');
Query OK, 1 row affected (0.00 sec) Session 2: mysql> select * from t5;
+----+------+------+
| sn | id | info |
+----+------+------+
| 1 | 1 | a1 |
+----+------+------+
1 row in set (0.00 sec) 看不到之前的修改 使用例子: 假设你需要插入一条新的记录到一个子表, 确保子表的记录在父表中也有。 你的应用代码可以确保在整个操作过程中引用的完整性。
14.3.2.4 Locking Reads 锁定读的更多相关文章
- 14.5.2.4 Locking Reads 锁定读:
14.5.2.4 Locking Reads 锁定读: 如果你查询数据然后插入或者修改相关数据在相同的事务里, 常规的SELECT 语句不能给予足够的保护. 其他事务可以修改或者删除你刚查询相同的记录 ...
- 一步一步学MySQL-一致性非锁定读和锁定读
一致性非锁定读(consistent nonlocking read) 一致性非锁定读是值InnoDB存储引擎通过多版本控制(multi versioning)的方式来读取当前执行时间数据库中的数据. ...
- SELECT ... FOR UPDATE or SELECT ... FOR SHARE Locking Reads session
小结: 1.注意使用限制 Locking reads are only possible when autocommit is disabled (either by beginning transa ...
- 转 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 ...
- Mysql 锁定 读情况
在一个事务中,标准的SELECT语句是不会加锁,但是有两种情况例外. SELECT ... LOCK IN SHARE MODE SELECT ... FOR UPDATE SELECT ... LO ...
- 14.3.2.1 Transaction Isolation Levels 事务隔离级别
14.3.2 InnoDB Transaction Model InnoDB 事务模型 14.3.2.1 Transaction Isolation Levels 事务隔离级别 14.3.2.2 au ...
- SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE locks在RR模式下可以看到最新的记录
14.5.2.4 Locking Reads 锁定读: 如果你查询数据然后插入或者修改相关数据在相同的事务里, 常规的SELECT 语句不能给予足够的保护. 其他事务可以修改或者删除你刚查询相同的记录 ...
- MySQL SELECT语法(一)SELECT语法详解
源自MySQL 5.7 官方手册:13.2.9 SELECT Syntax SELECT的语法如下: SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIO ...
- MySQL error : Deadlock found when trying to get lock; try restarting transaction
在使用 MySQL 时,我们有时会遇到这样的报错:“Deadlock found when trying to get lock; try restarting transaction”. 在 14. ...
随机推荐
- codeforces 487E Tourists
如果不是uoj上有的话(听说这是China Round),我有可能就错过这道题目了(这是我有史以来为oi写的最长的代码,用了我一天TAT!). 题目 传送门. 一个连通无向图,点上有权,支持两种操作: ...
- Python 对Twitter中指定话题的被转载Tweet数量的频谱分析
CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-7-10 @author: guaguastd @name: r ...
- 安装DBMS_SHARED_POOL包
在安装10g gc的时候,会遇到The DBMS_SHARED_POOL package is not executed on the Existing Database这样的一个错误,意思是提示你D ...
- 用c++开发基于tcp协议的文件上传功能
用c++开发基于tcp协议的文件上传功能 2005我正在一家游戏公司做程序员,当时一直在看<Windows网络编程> 这本书,把里面提到的每种IO模型都试了一次,强烈推荐学习网络编程的同学 ...
- django-cookieless 0.7 : Python Package Index
django-cookieless 0.7 : Python Package Index django-cookieless 0.7 Download django-cookieless-0.7.ta ...
- LA 3942 Remember the Word(前缀树&树上DP)
3942 - Remember the Word Neal is very curious about combinatorial problems, and now here comes a pro ...
- 九度OnlineJudge之1018:统计同成绩学生人数
题目描述: 读入N名学生的成绩,将获得某一给定分数的学生人数输出. 输入: 测试输入包含若干测试用例,每个测试用例的格式为 第1行:N 第2行:N名学生的 ...
- cPickle.so:: PyUnicodeUCS2_DecodeUTF8
cPickle.so:: PyUnicodeUCS2_DecodeUTF8错误 Python编译的参数,和Python module(mod_wsgi, pymodwsgi)编译参数不一,导致一些un ...
- Oracle 排序规则
<pre name="code" class="html">SQL> select * from t1 where id>=1 and ...
- UltraEdit配置python和lua环境
[语法高亮] 在UltraEdit的wordfile中添加python和lua的语法支持(红色的为python,蓝色的为lua): /L10"Python" Line Commen ...