MySQL InnoDB存储引擎的事务隔离级别

算你走运

算你走运

2016-02-19 18:05

今天图老师小编给大家精心推荐个MySQL InnoDB存储引擎的事务隔离级别教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

  我们知道,在关系数据库标准中有四个事务隔离级别:

  未提交读(Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据

  提交读(Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别

  可重复读(Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读

  串行读(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

  查看InnoDB系统级别的事务隔离级别:

mysql SELECT @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| REPEATABLE-READ   |
+-----------------------+
1 row in set (0.00 sec)

  查看InnoDB会话级别的事务隔离级别:

mysql SELECT @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)

  修改事务隔离级别:

  mysql set global transaction isolation level read committed;

  Query OK, 0 rows affected (0.00 sec)

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  mysql set session transaction isolation level read committed;

  Query OK, 0 rows affected (0.00 sec)

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  InnoDB的可重复读隔离级别和其他数据库的可重复读是有区别的,不会造成幻象读(phantom read),所谓幻象读,就是同一个事务内,多次select,可以读取到其他session insert并已经commit的数据。下面是一个小的测试,证明InnoDB的可重复读隔离级别不会造成幻象读。测试涉及两个session,分别为session 1和session 2,隔离级别都是repeateable read,关闭autocommit

mysql select @@tx_isolation;
+-----------------+
| @@tx_isolation |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)

  mysql set autocommit=off;

  Query OK, 0 rows affected (0.00 sec)

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  session 1 创建表并插入测试数据

  mysql create table test(i int) engine=innodb;

  Query OK, 0 rows affected (0.00 sec)

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  mysql insert into test values(1);

  Query OK, 1 row affected (0.00 sec)

  session 2 查询,没有数据,正常,session1没有提交,不允许脏读

  mysql select * from test;

  Empty set (0.00 sec)

  session 1 提交事务

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  mysql commit;

  Query OK, 0 rows affected (0.00 sec)

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

  session 2 查询,还是没有数据,没有产生幻象读

  mysql select * from test;

  Empty set (0.00 sec)

  以上试验版本:

mysql select version();
+-------------------------+
| version()       |
+-------------------------+
| 5.0.37-community-nt-log |
+-------------------------+
1 row in set (0.00 sec)

展开更多 50%)
分享

猜你喜欢

MySQL InnoDB存储引擎的事务隔离级别

编程语言 网络编程
MySQL InnoDB存储引擎的事务隔离级别

MySQL InnoDB存储引擎的一些参数

编程语言 网络编程
MySQL InnoDB存储引擎的一些参数

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

MySQL各存储引擎(INNODB,MyISAM等)的区别及其启动方法

MySQL mysql数据库
MySQL各存储引擎(INNODB,MyISAM等)的区别及其启动方法

安装MySQL事务数据库(InnoDB)

编程语言 网络编程
安装MySQL事务数据库(InnoDB)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

MySQL事务数据库(InnoDB类型)的安装方法

编程语言 网络编程
MySQL事务数据库(InnoDB类型)的安装方法

如何选择合适的MySQL存储引擎

编程语言 网络编程
如何选择合适的MySQL存储引擎

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

卡巴斯基老版本5.0升级至6.0的方法

卡巴斯基老版本5.0升级至6.0的方法

C++ 扩展和嵌入 Python(1)

C++ 扩展和嵌入 Python(1)
下拉加载更多内容 ↓