`

事务的ACID特性

 
阅读更多

事务

定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。

ACID

ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability).这是可靠数据库所应具备的几个特性.下面针对这几个特性进行逐个讲解.

原子性

原子性是指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生(即要么全部执行成功,要么全部失败回滚)。

举例:A->B转账,要么A金额减少,B金额增加;要么A金额不减少,B金额不增加。即要么都执行,要么都不执行。

 

在数据库管理系统(DBMS)中,默认情况下一条SQL就是一个单独事务,事务是自动提交的。只有显式的使用start transaction开启一个事务,才能将一个代码块放在事务中执行。保障事务的原子性是数据库管理系统的责任,为此许多数据源采用日志机制。例如,SQL Server使用一个预写事务日志,在将数据提交到实际数据页面前,先写在事务日志上。

一致性

一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。

保障事务的一致性,可以从以下两个层面入手:

a、数据库机制层面

数据库层面的一致性是,在一个事务执行之前和之后,数据会符合你设置的约束(唯一约束,外键约束,Check约束等)和触发器设置。这一点是由SQL SERVER进行保证的。

b、业务层面

对于业务层面来说,一致性是保持业务的一致性。这个业务一致性需要由开发人员进行保证。当然,很多业务方面的一致性,也可以通过转移到数据库机制层面进行保证。(即增加响应的约束条件)

隔离性

多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。这指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。

企业开发中,事务最复杂问题都是由事务隔离性引起的。当多个事务并发时,SQL Server利用加锁和阻塞来保证事务之间不同等级的隔离性。一般情况下,完全的隔离性是不现实的,完全的隔离性要求数据库同一时间只执行一条事务,这样会严重影响性能。想要理解SQL Server中对于隔离性的保障,首先要了解并发事务之间是如何干扰的.

 

1.事务之间的相互影响

事务之间的相互影响分为几种,分别为:脏读,不可重复读,幻读,丢失更新

1.1脏读

脏读意味着一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的。

1.2不可重复读

不可重复读意味着,在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。

1.3幻读(虚读)

幻读,是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

幻读和不可重复读都是读取了另一条已经提交的事务(这点就脏读不同),所不同的是不可重复读查询的都是同一个数据项,而幻读针对的是一批数据整体。

1.4丢失更新

两个事务同时读取同一条记录,A先修改记录,B也修改记录(B是不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。

 

2.理解SQL SERVER中的隔离级别

数据库的事务隔离级别(TRANSACTION ISOLATION LEVEL)是一个数据库上很基本的一个概念。为什么会有事务隔离级别,SQL Server上实现了哪些事务隔离级别?事务隔离级别的前提是一个多用户、多进程、多线程的并发系统,在这个系统中为了保证数据的一致性和完整性,我们引入了事务隔离级别这个概念,对一个单用户、单线程的应用来说则不存在这个问题。

为了避免上述几种事务之间的影响,SQL Server通过设置不同的隔离级别来进行不同程度的避免。因为高的隔离等级意味着更多的锁,从而牺牲性能。所以这个选项开放给了用户根据具体的需求进行设置。不过默认的隔离级别Read committed符合了多数的实际需求.

SQL Server隔离事务之间的影响是通过锁来实现的,通过阻塞来阻止上述影响。不同的隔离级别是通过加不同的锁,造成阻塞来实现的,所以会以付出性能作为代价;安全级别越高,处理效率越低;安全级别越低,效率高。

 

 

① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

③ Read committed (读已提交):可避免脏读的发生。

④ Read uncommitted (读未提交):最低级别,任何情况都无法保证。

持久性

持久性,意味着在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。即使出现了任何事故比如断电等,事务一旦提交,则持久化保存在数据库中。

SQL SERVER通过write-ahead transaction log来保证持久性。write-ahead transaction log的意思是,事务中对数据库的改变在写入到数据库之前,首先写入到事务日志中。而事务日志是按照顺序排号的(LSN)。当数据库崩溃或者服务器断电时,重启动SQL SERVER,SQLSERVER首先会检查日志顺序号,将本应对数据库做更改而未做的部分持久化到数据库,从而保证了持久性。

机制总结

事务的(ACID)特性是由关系数据库管理系统(RDBMS,数据库系统)来实现的。数据库管理系统采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行事务前的初始状态。

 

数据库管理系统采用锁机制来实现事务的隔离性。当多个事务同时更新数据库中相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。

 

  • 大小: 24 KB
分享到:
评论

相关推荐

    请简述 MySQL 中的事务,以及事务的 ACID 特性

    MySQL 中的事务是指一组数据库操作,这些操作要么全部执行成功,要么全部失败回滚。MySQL 中的事务通过 ACID 特性来保证数据的一致性和可靠性,ACID 特性包括哪些?

    分布式事务解决方案实战1

    1. 数据库事务ACID特性 - 原子性(Atomicity):事务的所有操作被视为单个不可分割的工作单元,要么全部执行,要么全部不执行。如果事务执行过程中出现错误,系统会回滚到事务开始前的状态。 - 一致性(Consistency)...

    事务处理技术1

    数据库恢复技术是确保事务ACID特性的关键手段。事务内部的故障、系统故障以及介质故障都可能导致数据库状态异常。在这些情况下,恢复机制需要撤销未完成的事务(UNDO),重做已提交的事务(REDO),甚至可能需要利用...

    微服务架构下分布式事务解决方案.docx

    【数据库事务ACID特性】 - 原子性:事务是不可分割的操作,全部执行或全部不执行。 - 一致性:事务完成后,系统状态保持一致,无数据损坏。 - 隔离性:并发事务执行时互不干扰,防止脏读、不可重复读和幻读。 - 持久...

    C++MySQL面试题经典40问!(全).docx

    3、事务ACID特性的实现原理?•原子性:是使用 undo log 来实现的,如果事务执行过程中出错或者用户执行了rollback,系统通过undo log日志返回事务开始的状态。•持久性:使用 redo log 来实现,只要redo log日志...

    MySQL经典面试题40问

    3、事务ACID特性的实现原理? o「原子性」:是使用 undo log 来实现的,如果事务执行过程中出错或者用户执行了rollback,系统通过undo log日志返回事务开始的状态。 o「持久性」:使用 redo log 来实现,只要...

    LNH_MySQL 04-MySQL服务事务详细介绍及ACID特性说明.mp4

    LNH_MySQL 04-MySQL服务事务详细介绍及ACID特性说明.mp4

    MySQL面试题经典40问!(全).docx

    •事务ACID特性的实现原理?•事务的隔离级别有哪些?•什么是脏读、不可重复读、幻读呢?•datetime和timestamp的区别?•varchar和char有什么区别?•count(1)、count(*) 与 count(列名) 的区别?•exist和in的...

    深入学习MySQL事务:ACID特性的实现原理

    本文将首先介绍MySQL事务相关的基础概念,然后介绍事务的ACID特性,并分析其实现原理。MySQL博大精深,文章疏漏之处在所难免,欢迎批评指正。事务(Transaction)是访问和更新数据库的程序执行单元;事务中可能包含...

    数据库管理系统试题及答案样本.doc

    本资源摘要信息涵盖了数据库管理系统的基础概念、两段锁合同、可串行化调度、死锁检测、事务 ACID 特性、关系模式、E-R 数据模型、SQL 语言等知识点,为读者学习数据库管理系统提供了系统的知识框架。

    数据库事务ACID属性:确保数据一致性的关键

    数据库事务是数据库管理...本文通过深入分析ACID属性,并结合实际的SQL代码示例,为读者提供了一个全面的数据库事务ACID属性指南。希望本文能够帮助读者在实际工作中更好地利用事务来保证数据操作的安全性和一致性。

    腾讯TBase数据库核心原理介绍.pptx

    2. **分布式事务ACID特性**:实现了强一致性的分布式事务,支持原子性、一致性、隔离性和持久性。 3. **分布式事务故障恢复**:通过时间戳和事务状态记录,实现事务的回滚和恢复,确保系统的稳定性。 4. **分布式...

    InnoDB存储引擎Log详解.pdf

    这两者是实现事务ACID特性的关键,同时也是优化数据库性能的重要手段。 1. Undo Log - **事务的原子性**:Undo Log的主要作用是为了保证事务的原子性,它记录了事务对数据的原始状态,当事务执行失败或执行...

    springcloud+eureka+mybatis+seata

    AT模式在保证事务ACID特性的同时,通过自动化的事务管理,降低了开发复杂性。 在AT模式下,Seata代理了数据库的事务,将本地事务转化为分布式事务。当一个全局事务开始时,Seata代理下的每个服务都会创建一个本地...

    数据库的ACID特性术语详解

    数据库的ACID特性是数据库管理系统(DBMS)中至关重要的概念,它确保了数据库操作的可靠性和一致性。ACID代表四个关键属性,分别是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性...

    林子雨大数据技术原理及应用第五章课后作业答案.docx

    - 关系数据库:优点在于其严谨的理论基础、事务ACID特性、高效的查询性能;缺点是扩展性差、不适合海量数据存储、数据模型僵硬、不适应Web 2.0应用、事务机制影响性能。 - NoSQL:优点包括支持大规模数据存储、...

    Spring事务的传播特性和隔离级别

    事务具备四个核心特性,通常被称为ACID特性: 1. **原子性(Atomicity)**:事务中的所有操作被视为一个不可分割的整体,要么全部成功执行,要么全部失败并回滚。这意味着事务中的每个操作都必须成功,否则整个事务...

    事务ACID1

    事务是数据库操作的核心概念,尤其在Java这样的编程语言中,理解和掌握事务的ACID特性对于开发高可用、数据一致性的应用程序至关重要。ACID是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和...

    高性能MySQL version 3 学习笔记.zip

    - 事务ACID特性:原子性、一致性、隔离性和持久性的理解及实现。 4. **复制与高可用**: - 数据库复制:主从复制的工作原理,半同步复制和多源复制的实现。 - 高可用架构:故障切换,读写分离,以及MySQL ...

Global site tag (gtag.js) - Google Analytics