共计 1936 个字符,预计需要花费 5 分钟才能阅读完成。
Server version: 5.6.21-log MySQL Community Server (GPL)
前提提要:
我们知道 MySQL 的 RR(repeatable read) 隔离级别下,事务无法看到正在活跃的事务所做的操作包括提交后的。
一般手动开启事务的命令是 begin 或 start transaction;我以前的理解是一旦执行这条语句就已经开启了事务,也就是事务 id 已经生成 (可用于 MVCC 版本比较)。如果事务 A 和事务 B 一起执行 begin,事务 A 的所有操作的提交事务 B 都看不到;
事实是否定的;
环境:
mysql> show variables like 'tx_iso%';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| tx_isolation | REPEATABLE-READ |
+---------------+-----------------+
1 row in set (0.00 sec)
mysql> show variables like 'auto%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| auto_increment_increment | 1 |
| auto_increment_offset | 1 |
| autocommit | ON |
| automatic_sp_privileges | ON |
+--------------------------+-------+
4 rows in set (0.00 sec)
mysql> show create table t12;
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| t12 | CREATE TABLE `t12` (`a` int(10) unsigned NOT NULL AUTO_INCREMENT,
`b` varchar(766) DEFAULT NULL,
`c` int(11) DEFAULT NULL,
PRIMARY KEY (`a`),
KEY `b` (`b`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
实验结果是:事务 B 在未提交和为回滚的情况下,看到了事务 A 提交的数据;
一旦 begin 命令之后紧跟着 select 语句就开启了事务;或者以 start transaction with consistent snapshot 开始事务,就无法看到事务 A 提交的数据;
也就是实现了非锁定一致性读;
结论:通过命令 begin;start transaction;开始事务,实际上并没有达到完全的可重复读;
本文永久更新链接地址 :http://www.linuxidc.com/Linux/2017-02/140842.htm
正文完
星哥玩云-微信公众号