`

acid

阅读更多
事务的四个属性:原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)。

1.原子性(Atomic)
    最重要的原则,也是最容易理解的原则。被事务管理的所有方法,要么一起被提交,要么一起回滚。

2.一致性(Consistency)
    事务在系统完整性中实施一致性,如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于新有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。

3.隔离性(Isolation)
    在隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。重要的是,在隔离状态执行事务,系统的状态有可能是不一致的,在结束事务前,应确保系统处于一致状态。但是在每个单独的事务中,系统的状态可能会发生变化。如果事务不是在隔离状态运行,它就可能从系统中访问数据,而系统可能处于不一致状态。通过提供事务隔离,可以阻止这类事件的发生。

4.持久性(Durability)
    持久性意味着一旦事务执行成功,在系统中产生的所有变化将是永久的。应该存在一些检查点防止在系统失败时丢失信息。甚至硬件本身失败,系统的状态仍能通过在日志中记录事务完成的任务进行重建。

数据库锁概念:
    在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它读取和修改。加了共享锁的数据对象可以被其他事务读取,但不能修改。数据库利用这两种基本的锁类型来对数据库的事务进行并发控制。
    从程序员的角度看,锁分为以下两种类型:
    1.乐观锁(Optimistic Lock)
    乐观锁假定在处理数据时,不需要在应用程序的代码中做任何事情就可以直接在记录上加锁、即完全依靠数据库来管理锁的工作。一般情况下,当执行事务处理时SQL Server会自动对事务处理范围内更新到的表做锁定。
    2.悲观锁(Pessimistic Lock)
    悲观锁对数据库系统的自动管理不感冒,需要程序员直接管理数据或对象上的加锁处理,并负责获取、共享和放弃正在使用的数据上的任何锁。


事务隔离级别
    一个事务必须与其它事务进行隔离的程度。较低的隔离级别可以增加并发,但代价是降低数据的正确性。相反,较高的隔离级别可以确保数据的正确性,但可能对并发产生负面影响。

数据库并发操作存在的异常情况:
1. 更新丢失(Lost update):两个事务都同时更新一行数据但是第二个事务却中途失败退出导致对数据两个修改都失效了这是系统没有执行任何锁操作因此并发事务并没有被隔离开来

2. 脏读取(Dirty Reads):一个事务开始读取了某行数据但是另外一个事务已经更新了此数据但没有能够及时提交。这是相当危险很可能所有操作都被回滚

3. 不可重复读取(Non-repeatable Reads):一个事务对同一行数据重复读取两次但是却得到了不同结果。例如在两次读取中途有另外一个事务对该行数据进行了修改并提交

4. 两次更新问题(Second lost updates problem):无法重复读取特例,有两个并发事务同时读取同一行数据然后其中一个对它进行修改提交而另一个也进行了修改提交这就会造成第一次写操作失效

5. 幻读(Phantom Reads):也称为幻像(幻影)。事务在操作过程中进行两次查询,第二次查询结果包含了第一次查询中未出现的数据(这里并不要求两次查询SQL语句相同)这是因为在两次查询过程中有另外一个事务插入数据造成的

为了避免上面出现几种情况在标准SQL规范中定义了4个事务隔离级别,不同隔离级别对事务处理不同 。

1.未授权读取(Read Uncommitted):也称未提交读。允许脏读取但不允许更新丢失,如果一个事务已经开始写数据则另外一个数据则不允许同时进行写操作但允许其他事务读此行数据。该隔离级别可以通过“排他写锁”实现。事务隔离的最低级别,仅可保证不读取物理损坏的数据。与READ COMMITTED 隔离级相反,它允许读取已经被其它用户修改但尚未提交确定的数据。

2. 授权读取(Read Committed):也称提交读。允许不可重复读取但不允许脏读取。这可以通过“瞬间共享读锁”和“排他写锁”实现,读取数据的事务允许其他事务继续访问该行数据,但是未提交写事务将会禁止其他事务访问该行。SQL Server 默认的级别。在此隔离级下,SELECT 命令不会返回尚未提交(Committed) 的数据,也不能返回脏数据。

3. 可重复读取(Repeatable Read):禁止不可重复读取和脏读取。但是有时可能出现幻影数据,这可以通过“共享读锁”和“排他写锁”实现,读取数据事务将会禁止写事务(但允许读事务),写事务则禁止任何其他事务。在此隔离级下,用SELECT 命令读取的数据在整个命令执行过程中不会被更改。此选项会影响系统的效能,非必要情况最好不用此隔离级。

4. 串行(Serializable):也称可串行读。提供严格的事务隔离,它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行。如果仅仅通过“行级锁”是无法实现事务序列化的,必须通过其他机制保证新插入的数据不会被刚执行查询操作事务访问到。事务隔离的最高级别,事务之间完全隔离。如果事务在可串行读隔离级别上运行,则可以保证任何并发重叠事务均是串行的。


隔离级别 更新丢失 脏读取 重复读取 幻读
未授权读取 N Y Y Y
授权读取 N N Y Y
可重复读取 N N N Y
串行 N N N N


分享到:
评论

相关推荐

    acid-0.9.6b23

    "acid-0.9.6b23" 是一个针对Linux和Unix操作系统的网络安全工具,主要与Snort入侵检测系统(IDS)配合使用。这个工具的名称“acid”是“Analysis Console for Intrusion Detection”的缩写,它提供了一个基于Web的...

    ACID 7.0汉化包

    《ACID 7.0汉化包:深入理解与应用》 ACID 7.0是一款备受音乐制作人青睐的数字音频工作站(Digital Audio Workstation,简称DAW),由Sony Creative Software开发。这款软件以其独特的循环音乐创作功能而闻名,为...

    ACID_pro4 ACID中文版本

    **ACID Pro 4** 是一款由Sony Creative Software(现为Magix)开发的专业音乐制作软件,主要用于电子音乐创作和音频编辑。它以其创新的循环音乐制作理念而著名,为音乐制作人提供了一个强大且直观的工作环境。在这款...

    Acid

    在IT领域,"Acid"通常与 Acid Tests 相关联,这是一个术语,特别是在数据库管理和Web标准测试中。Acid测试,全称为“Atomicity、Consistency、Isolation、Durability”,是一组确保数据库事务处理正确性的准则。这些...

    分布式-CAP与ACID原则

    ### 分布式系统中的CAP与ACID原则 #### 一、CAP原则 **1.1 定义** 在分布式系统中,CAP原则是评估系统在面对网络分区等故障时表现的关键标准之一。它包含了三个核心概念:强一致性(Consistency)、可用性...

    ACID pro4.0(音频处理)汉化版带注册机

    ACID pro4.0(音频处理)汉化版带注册机

    acid-0.9.6b23.tar.rar

    标题中的"acid-0.9.6b23.tar.rar"是一个软件包的标识,它表明这个文件是一个压缩包,包含版本号为0.9.6b23的ACID(Attack Console Integrated Database)软件。".tar"后缀表示这是一个tar归档文件,通常用于在Linux...

    ACID Pro 6.0 d版+注册机+汉化.part3.rar

    ACID Pro 6.0 d版+注册机+汉化音乐合成工具

    acid-0.9.6b22.tar.gz

    ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必须要具有这四种特性,...

    Solvent extraction of vanadium (IV) from sulfuric acid solution using P507

    标题中提到的“Solvent extraction of vanadium (IV) from sulfuric acid solution using P507”,意味着本文的研究主题是使用一种名为P507的萃取剂,从含有硫酸的溶液中萃取四价钒(V4+)。P507是一种有机磷萃取剂...

    具有Snort,Apache,MySQL,PHP,ACID的入侵检测系统Intrusion Detection Systems with Snort, Apache, MySQL, PHP, ACID

    ACID项目在开源社区中有一定的知名度,它能提供一个基于Web的界面来查看Snort警报,并能够帮助分析警报之间的关系,为管理员提供深层次的洞察。 根据描述,本书提供了关于如何利用上述免费开源工具来构建和管理入侵...

    HBase_SI_--_实现HBase_ACID的理论

    根据给定文件的信息,本文将深入探讨"HBase_SI"这一理论框架,该理论旨在实现HBase中的ACID特性。文章将从多个角度分析HBase_SI的设计理念、技术细节及其应用场景。 ### HBase_SI:实现HBase_ACID特性的理论 #### ...

    The Effects of Exogenous Salicylic Acid on Ganoderic Acid Biosynthesis and The Expression of Key Genes in The Ganoderic Acid Biosynthesis Pathway in Ganoderma lucidum

    标题所反映的知识点是关于灵芝酸(ganoderic acid,简称GA)的生物合成及其关键基因表达的研究。该研究探讨了外源水杨酸(salicylic acid,简称SA)对灵芝(Ganoderma lucidum)中灵芝酸生物合成的影响,以及SA如何...

    sony acid 4.0

    【Sony Acid 4.0】是一款由Sony Creative Software开发的专业音乐制作软件,它以其独特的循环音乐编辑功能闻名,尤其适合电子音乐和电影配乐的创作。Acid 4.0在音乐制作领域具有里程碑式的意义,它将数字音频工作站...

    ACID7 注册机

    ony ACID Pro 7.0 注册机 ------------------------------ 测试通过2010 .8

    ACID 概念

    ### ACID 概念详解 #### 什么是ACID? ACID是事务处理中四个关键属性的缩写,分别代表原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这四个属性确保了在数据库系统中...

    ssc_lead_acid_battery-源码.rar

    标题中的"ssc_lead_acid_battery-源码.rar"暗示了这是一个与铅酸电池(Lead-Acid Battery)相关的软件源代码压缩包。 SSC(System Advisor Model)是美国国家可再生能源实验室(NREL)开发的一个用于分析和模拟不同...

    acid_label

    "acid_label"可能指的是一个特定的字体系列或者一种设计风格,它可能具有独特的艺术感和识别度,用于增强文本的视觉效果。下面将详细讨论字体在IT领域的应用和重要性,以及可能与"acid_label"相关的知识点。 首先,...

Global site tag (gtag.js) - Google Analytics