`
san_yun
  • 浏览: 2663487 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

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)

mysql> set session transaction isolation level read committed;
Query OK, 0 rows affected (0.00 sec)

 

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)

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

mysql> create table test(i int) engine=innodb;
Query OK, 0 rows affected (0.00 sec)

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 提交事务

mysql> commit;
Query OK, 0 rows affected (0.00 sec)

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)

--EOF--

分享到:
评论

相关推荐

    MySQL技术内幕 InnoDB存储引擎.pdf

    最近在学习MySQL技术内幕 InnoDB存储引擎 第2版,整理了一些文档分享出来,同时也方便以后查看。若有不当之处,烦请批评指正。 1. MySQL体系结构和存储引擎 2. InnoDB存储引擎 2.1 InnoDB体系结构 2.2 ...

    MySQL内核:InnoDB存储引擎 卷1.pdf.zip

    InnoDB存储引擎是MySQL中的默认存储引擎,特别适合需要ACID(原子性、一致性、隔离性和持久性)属性的事务处理应用。其主要特点包括: 1. **事务支持**:InnoDB支持事务的四种隔离级别,包括读未提交(READ ...

    MySQL技术内幕 InnoDB存储引擎.pptx

    "MySQL技术内幕 InnoDB存储引擎" 《MySQL技术内幕:InnoDB存储引擎》是一本深入解析InnoDB存储引擎的经典之作,由国内资深MySQL专家亲自执笔,国内外多位数据库专家联袂推荐。本书从源代码的角度深度解析了InnoDB的...

    MySQL技术InnoDB存储引擎_姜承尧_第2版

    在MySQL数据库中,InnoDB存储引擎扮演着至关重要的角色,它是支持事务处理、行级锁定以及外键约束的主要引擎。InnoDB的引入使得MySQL能够满足企业级应用的需求,提供了高度的数据一致性与可靠性。 首先,InnoDB的...

    Innodb存储引擎浅析—事务系统

    ### Innodb存储引擎浅析—事务系统 #### 学述 在MySQL的众多存储引擎中,InnoDB无疑是最为重要且被广泛使用的之一。本文旨在深入解析InnoDB存储引擎中的事务处理机制及其背后的设计原理。 #### 存储引擎介绍 在...

    MySQL参考手册和InnoDB存储引擎技术手册 PDF格式

    MySQL是世界上最受欢迎的开源数据库系统之一,而InnoDB存储引擎是其最常用的核心组件,尤其在处理事务性和ACID(原子性、一致性、隔离性、持久性)需求方面。本资料包包含三本关于MySQL和InnoDB的重要书籍,分别是...

    MySQL核心Innodb存储引擎浅析—事务系统

    ### MySQL核心Innodb存储引擎浅析—事务系统 #### 存储引擎介绍 在MySQL中,存储引擎是处理表的存储方式的核心组件之一。不同的存储引擎提供了不同的特性,如事务支持、锁定粒度等。其中,MyISAM和InnoDB是最常用...

    MySQL事务隔离级别

    MySQL通过InnoDB存储引擎实现了事务处理,并支持四种隔离级别。可以通过`SET TRANSACTION ISOLATION LEVEL`语句来设置当前会话的事务隔离级别。此外,InnoDB还提供了一些特定的特性,如Next-Key Locks,以帮助解决幻...

    MySQL中Innodb的事务隔离级别和锁的关系的讲解教程

    MySQL中的InnoDB存储引擎提供了四个事务隔离级别,分别是:读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeated Read)和可串行化(Serializable)。 脏读发生在事务读取了另一个尚未...

    MySQL 技术内幕:InnoDB存储引擎

    1. **事务安全性**:InnoDB存储引擎通过使用两阶段提交协议来确保事务的原子性、一致性、隔离性和持久性(ACID特性)。这意味着即使在系统崩溃或电源故障的情况下,也能保证数据的一致性和完整性。 2. **行级锁定**...

    InnoDB的奥秘:深入探索MySQL的InnoDB存储引擎特性

    InnoDB 存储引擎是一种专门为事务处理、高可靠性和性能优化设计的存储引擎,自 MySQL 5.5 版本起成为 MySQL 的默认存储引擎。它能够为现代数据库应用程序提供强大的数据完整性和高性能事务处理能力,适用于需要高度...

    MySQL innodb 技术内幕

    InnoDB 存储引擎通过使用 MVCC 来获取高并发性,并且实现 SQL 标准的 4 种隔离级别,同时使用一种被称为 next-key locking 的策略来避免幻读现象。 ### 1.3.2 MyISAM 存储引擎 MyISAM 存储引擎是不支持事务的存储...

    mysql技术内幕innodb存储引擎学习.zip

    本资料包“mysql技术内幕innodb存储引擎学习.zip”显然是针对深入理解InnoDB存储引擎的学习资源,其中可能包含详细的技术讲解、实践案例和相关教程。 InnoDB存储引擎的核心特性包括: 1. **事务支持**:InnoDB提供...

    简述MySQL InnoDB存储引擎

    它提供了四种事务隔离级别,以满足不同场景的需求。 - **行级锁定**:与MyISAM的表级锁定相比,InnoDB支持行级锁定,这大大减少了在并发环境中发生锁定冲突的可能性,提高了多用户环境下的性能。 - **外键支持**:...

    mysql存储引擎(csdn)————程序.pdf

    InnoDB存储引擎是MySQL的默认引擎,尤其在高并发和事务处理的场景下被广泛使用。InnoDB的最大特点是它支持事务处理(ACID属性:原子性、一致性、隔离性、持久性),这意味着在多用户环境下,InnoDB可以保证数据的...

    03-MySQL逻辑架构和Innodb存储引擎1

    4. **事务隔离级别**:InnoDB支持四种事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ,InnoDB的默认级别)和串行化(SERIALIZABLE)。 5. **Next-Key ...

    MySQL数据库事务隔离级别详解

    不过,MySQL的InnoDB存储引擎在“Repeatable Read”级别下通过MVCC(多版本并发控制)和间隙锁策略,可以避免幻读。而在MyISAM引擎下,幻读则可能出现。 4. 串行化(Serializable): 这是最高的隔离级别,完全避免...

    MySQL的Innodb中的事务隔离级别和锁的关系

    MySQL的InnoDB存储引擎在处理事务时,为了保证数据的一致性和隔离性,采用了一种称为两段锁协议的机制。这种机制将事务分为两个阶段:加锁阶段和解锁阶段。在加锁阶段,事务可以获取需要的锁,无论是读锁(共享锁,S...

    static-mkk#something#MySQL技术内幕:innodb存储引擎1

    第一章:mysql存储引擎1.innodb存储引擎支持事务;行锁设计;支持外键;支持非锁定读。4种事务隔离级别,默认为repeatable,同时使用next-k

Global site tag (gtag.js) - Google Analytics