iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >数据库事务隔离的级别
  • 812
分享到

数据库事务隔离的级别

2024-04-02 19:04:59 812人浏览 安东尼
摘要

本篇内容介绍了“数据库事务隔离的级别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 概述与背景这是数据库

本篇内容介绍了“数据库事务隔离的级别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1 概述与背景

这是数据库事务原理和工程实践系列文章的第一篇,本文主要在Jim Gray的论文<A Critique of ANSI sql Isolation Levels>基础上分析关系数据库的事务隔离级别标准和不同隔离级别情况下的行为。第2节主要讨论ANSI标准的下的隔离级别,第3节主要讨论基于悲观实现的事务隔离级别,第4节主要讨论基于多版本技术的事务隔离,最后总结排序本文讨论到的各个隔离级别。

ACID是关系数据库的一组重要特性,其中Isolation(隔离性)描述了数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发时由于交错执行而导致数据的不一致。在最极端的情况下,数据库完全串行化执行每一个事务,所有事务之间遵守全序关系,在这种情况下,不存在并发事务间的隔离问题,但是在实际工程实践中,处于对数据库性能吞吐量的考虑,允许多个事务之间按照一定的规则,打破串行话的全序关系,ANSI SQL Isolation Levels即规定了这种“规则”,通过将隔离性划分为4个级别,来换取多层级的事务间并发能力(即数据库的吞吐能力)。

注,本文内容融入了作者个人的理解,并没有严格遵守<A Critique of ANSI SQL Isolation Levels>原文的内容;其中cursor stability隔离级别将在后续文章中讨论,快照隔离级别与ANSI标准异象的比较也有所不同。

2 ANSI事务隔离级别

ANSI SQL-92标准(Http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt)将数据库并发事务间的隔离性行为划分为3种"异象(phenomena)",从低到高的自然语言定义依次为:

  1. P1 脏读 ("Dirty read"): SQL-transaction T1 modifies a row. SQL- transaction T2 then reads that row before T1 perfORMs a COMMIT. If T1 then performs a ROLLBACK, T2 will have read a row that was never committed and that may thus be considered to have never existed. 

  2. P2 不可重复读 ("Non-repeatable read"): SQL-transaction T1 reads a row. SQL- transaction T2 then modifies or deletes that row and performs a COMMIT. If T1 then attempts to reread the row, it may receive the modified value or discover that the row has been deleted. 

  3. P3 幻读 ("Phantom"): SQL-transaction T1 reads the set of rows N that satisfy some <search condition>. SQL-transaction T2 then executes SQL-statements that generate one or more rows that satisfy the <search condition> used by SQL-transaction T1. If SQL-transaction T1 then repeats the initial read with the same <search condition>, it obtains a different collection of rows.

通过依次禁止这三种异象,ANSI确定了4种标准隔离级别,如下表所示:

级别P1(脏读)P2(不可重复读)P3(幻读)
Read Uncommitted允许允许允许
Read Committed禁止允许允许
Repeatable Read禁止
禁止
允许
(Anomaly) Serializable禁止
禁止
禁止
Note: The exclusion of these penomena or SQL-transactions executing at isolation level SERIALIZABLE is a consequence of the requirement that such transactions be serializable.

如标准文档所述,禁止了P1/P2/P3异象的事务即满足Serializable级别,但矛盾的是,标准文档中对Serializable又做了如下说明:

The execution of concurrent SQL-transactions at isolation level SERIALIZABLE is guaranteed to be serializable. A serializable execution is defined to be an execution of the operations of concurrently executing SQL-transactions that produces the same effect as some serial execution of those same SQL-transactions

它要求多个并发事务执行的效果与某种串行化执行的效果一致,但是仅仅禁止P1/P2/P3异象,并不一定能够保证“serial execution”的效果,因此论文中将ANSI Serializable称为Anomaly Serializable。

P1/P2/P3的形式化描述

根据标准文档的定义,可以将这三种异象使用形式化语言描述如下,称为A1/A2/A3(其中w1[x]表示事务1写入记录x,r1表示事务1读取记录x,c1表示事务1提交,a1表示事务1回滚,r1[P]表示事务1按照谓词P的条件读取若干条记录,w1[y in P]表示事务1写入记录y满足谓词P的条件):

  • A1 脏读:w1[x] ... r2[x] ... (a1 and c2 in any order)

  • A2 不可重复读:r1[x] ... w2[x] ... c2 ... r1[x] ... c1

  • A3 幻读:r1[P] ... w2[y in P] ... c2 ... r1[P] ... c1

上述A1/A2/A3形式化描述,根据标准定义的P1/P2/P3异象的自然语言描述转化而来,但是ANSI标准定义的异象只针对了单个记录或谓词描述,对于多条记录需满足业务一致性的场景并未能覆盖(比如两个账户间转账要求余额总和不变),举例如下:

  • H1:r1[x=50]w1[x=10] r2[x=10]r2[y=50] c2 r1[y=50]w1[y=90] c1

    • 事务1执行账户x向账户y转账40,事务2读取到了进行到了一半的事务1(Read Uncommitted),破坏了余额总和的一致性

    • 因为事务1并未回滚,H1的行为并不符合A1的形式化定义

  • H2:r1[x=50]

    Read LockWrite Lock
    Locking
    Read Uncommited

    none required

    Well-formed Writes,

    Long duration Write locks

    Locking
    Read Commited
    Well-formed Reads,
    Short duration read lock

    Well-formed Writes,

    Long duration Write locks

    Locking
    Repeatable Read
    Well-formed Reads,
    Long duration data-item Read locks,
    Short duration Read Predicate locks

    Well-formed Writes

    Long duration Write locks

    Locking
    Serializable
    Well-formed Reads,
    Long duration Read locks

    Well-formed Writes

    Long duration Write locks

    将locking标记的四种隔离级别与ANSI隔离级别对比:


    • Well-formed Reads, Short duration read lockRead Uncommitted < Read Committed < (Repeatable Read >< Snapshot) < Serializable

      本文首先介绍了ANSI基于“异象”的隔离级别标准,并分析了其狭义和广义的描述;然后介绍了基于锁的隔离级别标准,与ANSI隔离级别进行了比较;最后分析快照隔离级别,在ANSI隔离级别标准基础上,提出了两种新的“异象”,得出快照隔离在几种标准隔离级别特性中的位置。

“数据库事务隔离的级别”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

您可能感兴趣的文档:

--结束END--

本文标题: 数据库事务隔离的级别

本文链接: https://www.lsjlt.com/news/59723.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 数据库事务的隔离级别
    数据库事务的隔离级别有4种,由低到高分别为Read uncommitted 、Read committed 、Repeatable read 、Serializable 。而且,在事务的并发操作中可能会出现脏读,不可重复读,幻读。下面通过事...
    99+
    2014-06-29
    数据库事务的隔离级别 数据库入门 数据库基础教程 数据库 mysql
  • 数据库事务隔离的级别
    本篇内容介绍了“数据库事务隔离的级别”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 概述与背景这是数据库...
    99+
    2022-10-18
  • mysql数据库事务及隔离级别
    事务的四大特性: 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性: 执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的; 隔离性: 并发访问数据库时,一个用户的事务...
    99+
    2021-09-18
    mysql数据库事务及隔离级别
  • 数据库事务:ACID 和隔离级别
    一、什么是事务 事务是将多条 SQL 作为一个整体进行数据操作。这样能确保全部执行成功或全部执行失败,不改变任何数据。根据业务需求选择不同的存储引擎。对于那些不需要事务的查询类应用,选择非事务型的存储引擎能得到更高的性能,LOCK TABL...
    99+
    2016-06-16
    数据库事务:ACID 和隔离级别
  • 数据库事务隔离级别是什么
    这篇文章主要介绍了数据库事务隔离级别是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数据库事务隔离级别:1、Read Uncommitt...
    99+
    2022-10-18
  • 数据库隔离级别
    数据库隔离级别 如果没有隔离级别会出现的问题 脏读 意思是读取到了事务正在修改的数据,如果事务回滚,那么拿到的数据就是错误的 时间 事务A 事务B 1 开始事务 2 读取quantity为5 3 修改qu...
    99+
    2019-12-06
    数据库隔离级别
  • 数据库ACID原则和事务隔离级别
    数据库ACID原则A:原子性,AtomicityC:一致性,ConsistencyI:隔离性,IsolationD:持久性,Durability在mysql中的innodb引擎,原子性,一致性,隔离性通过r...
    99+
    2022-10-18
  • 数据库中事务的隔离级别是什么
    数据库中事务的隔离级别是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。MySQL 事务主要用于处理操作量大,复杂度高的数据...
    99+
    2022-10-18
  • 数据库的事务隔离级别怎么理解
    本篇内容主要讲解“数据库的事务隔离级别怎么理解”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“数据库的事务隔离级别怎么理解”吧!在MVCC并发控制中,读操作可以分...
    99+
    2022-10-19
  • 事务隔离级别
    事务隔离是数据库处理的基础之一,Isolation是ACID中I的缩写,当多个事务同时进行更改和执行查询时,隔离级别是微调性能和可靠性、一致性和结果再现性之间的平衡的设置 MySQL支持以下几个隔离级别 ...
    99+
    2022-10-18
  • 事务隔离性和隔离级别
    隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离 事务的隔离级别有哪些? 一、概念 Read uncommitted(读未提交) Read ...
    99+
    2021-04-27
    事务隔离性和隔离级别
  • 数据库的事务和隔离等级
    这篇文章将为大家详细讲解有关数据库的事务和隔离等级,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。事务事务指的是满足 ACID 特性的一组操作,可以通过 Commit 提交...
    99+
    2022-10-18
  • 数据库事务的四大特性和隔离级别
    数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么全部执行,要么全部都不执行。一个逻辑工作单元要成为事务,必须满足事务的四大特性(ACID)。即原子性(...
    99+
    2022-10-18
  • MySQL事务隔离级别
      四类隔离级别    SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的。低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销。  Read Unc...
    99+
    2022-10-18
  • MySQL 事务的隔离级别
    1. 事务的ACID 事务的ACID是指事务拥有的4个特性的首字母组合:atomicity(原子性), consistency(一致性), isolation(隔离性)和durability(持久性)。 ①atomicity(原子...
    99+
    2019-01-27
    MySQL 事务的隔离级别
  • MySQL的事务隔离级别
    目录数据库事务的四大特性⑴ 原子性(Atomicity)⑵ 一致性(Consistency)⑶ 隔离性(Isolation)⑷ 持久性(Durability)SQL的4种隔离级别Read Uncommitted(读取未提交内容)R...
    99+
    2021-07-07
    MySQL的事务隔离级别
  • mysql事务隔离的级别
    这篇文章主要介绍“mysql事务隔离的级别”,在日常操作中,相信很多人在mysql事务隔离的级别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql事务隔离的级别”的疑惑...
    99+
    2022-10-18
  • 数据库事务的四大特性以及事务的隔离级别
    四大特性 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: 原子性(Atomicity)   原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前面两篇博客介绍事务的功能是一样的概念,因此事务的操作如果...
    99+
    2022-01-10
    数据库事务的四大特性以及事务的隔离级别
  • mysql数据库四种事务隔离级别是什么
    这篇文章主要介绍了mysql数据库四种事务隔离级别是什么,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。熟悉 mysql 数据库四种事务隔离级别:...
    99+
    2022-10-18
  • 数据库事务隔离级别与概念是什么
    这篇文章将为大家详细讲解有关数据库事务隔离级别与概念是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。事务隔离的概念任何支持事务的数据库,都必须具备四个特...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作