数据库事务(Transaction)的ACID特性解释
事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这两个操作要么都执行,要么都不执行。
1、数据库事务必须具备ACID特性,ACID是Atomic(原子性)、Consistency(一致性)、Isolation(隔离性)和Durability(持久性)的英文缩写。
1)原子性(Atomicity)
一个事务(transaction)中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过一样。(oracle通过redo和undo日志保证)
2)一致性(Consistency)
事务的一致性指的是在一个事务执行之前和执行之后数据库都必须处于一致性状态。如果事务成功地完成,那么系统中所有变化将正确地应用,系统处于有效状态。如果在事务中出现错误,那么系统中的所有变化将自动地回滚,系统返回到原始状态。
3)隔离性(Isolation)
指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。
4)持久性(Durability)
指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。
2、事务的(ACID)特性是由关系数据库管理系统(RDBMS,数据库系统)来实现的。数据库管理系统采用日志来保证事务的原子性、一致性和持久性。日志记录了事务对数据库所做的更新,如果某个事务在执行过程中发生错误,就可以根据日志,撤销事务对数据库已做的更新,使数据库退回到执行事务前的初始状态。
数据库管理系统采用锁机制来实现事务的隔离性。当多个事务同时更新数据库中相同的数据时,只允许持有锁的事务能更新该数据,其他事务必须等待,直到前一个事务释放了锁,其他事务才有机会更新该数据。
3、在关系型数据库中,事务的隔离性分为四个隔离级别,在解读这四个级别前先介绍几个关于读数据的概念。
1)脏读(Dirty Reads):所谓脏读就是对脏数据(Drity Data)的读取,而脏数据所指的就是未提交的数据。也就是说,一个事务正在对一条记录做修改,在这个事务完成并提交之前,这条数据是处于待定状态的(可能提交也可能回滚),这时,第二个事务来读取这条没有提交的数据,并据此做进一步的处理,就会产生未提交的数据依赖关系。这种现象被称为脏读。(oracle通过undo日志保证,读未提交的数据时,放回undo后的数据)
2)不可重复读(Non-Repeatable Reads):一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读。也就是说,这个事务在两次读取之间该数据被其它事务所修改。
3)幻读(Phantom Reads):一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。
4、事务四个隔离级别对比:
1)未提交读(Read Uncommitted):SELECT语句以非锁定方式被执行,所以有可能读到脏数据,隔离级别最低。(读不加锁)
2)提交读(Read Committed):只能读取到已经提交的数据。即解决了脏读,但未解决不可重复读。(事务中读时加行锁,等写事务结束)
3)可重复读(Repeated Read):在同一个事务内的查询都是事务开始时刻一致的,InnoDB的默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻读。(读事务开始时加行锁,等写事务结束;mvcc机制等)
4)串行读(Serializable):完全的串行化读,所有SELECT语句都被隐式的转换成SELECT ... LOCK IN SHARE MODE,即读取使用表级共享锁,读写相互都会阻塞。隔离级别最高。(读事务开始时加表锁,以上3个均为行锁/记录锁,当前为表锁)
数据库事务(Transaction)的ACID特性解释相关推荐
- 数据库事务必须具备的特性:ACID【转】
from:http://zh.wikipedia.org/wiki/ACID ACID,是指在数据库管理系统(DBMS)中事务所具有的四个特性:原子性(Atomicity).一致性(Consisten ...
- 数据库 - 事务管理(ACID)隔离级别 事务传播行为
转载自 数据库 - 事务管理(ACID)隔离级别 事务传播行为 总览: 事务的4大特性(ACID) 原子性(Atomicity) 原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这和前 ...
- 数据库事务Transaction)那点事
Transaction 也就是所谓的事务了,通俗理解就是一件事情.从小,父母就教育我们,做事情要有始有终,不能半途而废. 事务也是这样,不能做一般就不做了,要么做完,要么就不做.也就是说,事务必须是一 ...
- 数据库事务(Transaction)与锁(Locking)详解图析
一.事务 事务(Transaction)是由一系列对系统中数据进⾏访问与更新的操作所组成的⼀个程序执行逻辑单元. 注:中止(abort):表示事务未成功结束,撤消事务的所有操作. 数据库应用程序通常通 ...
- mysql数据库事务有几种特性_面试官:你能说说事务的几个特性是啥?有哪几种隔离级别?...
1.面试题事务的几个特点是什么? 数据库事务有哪些隔离级别? MySQL的默认隔离级别?2.面试官心里分析 用mysql开发的三个基本面:存储引擎.索引,然后就是事务,你必须得用事务. 因为一个业务系 ...
- 数据库事务的4大特性与隔离级别
本篇讲诉数据库中事务的四大特性(ACID),并且将会详细地说明事务的隔离级别. 如果一个数据库声称支持事务的操作,那么该数据库必须要具备以下四个特性: ⑴ 原子性(Atomicity) 原子性是指事务 ...
- 数据库事务四大特征ACID
数据库的事务,必须支持以下特征: 1. 原子性(Atomicity) 在一个事务内的操作,要么全部成功,要么全部失败. 2. 一致性(Consistency) 数据库从一个一致性状态,转移到另一个一致 ...
- 数据库 事务的特性ACID
事务(Transaction)是并发控制的基本单位. 所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.例如,银行转帐工作:从一个帐号扣款并使另一个帐号增款,这 ...
- java mysql数据库回退_数据库事务及Java中的处理
事 务是指一组相互依赖的操作行为,举一个举得不能再被举的例子就是银行交易,当然还有其他像网上购物,电子货币交易等等,事务的成功取决于这些相互依赖的操 作行为是否都能执行成功,只要有一个操作行为失败,就 ...
最新文章
- 笔记本电脑的有线和无线网络同时使用,如何设置?
- 公有云和私有云,哪种是大势所趋?
- UISegmentedControl的详细使用
- linux脚本重启进程,linux下通过脚本实现自动重启程序
- MySQL 去除重复的方法
- 如何使用GeneralUpdte构建客户端自动升级功能
- LeetCode 705 Design HashSet 解题报告
- JAVA出现空指针异常(初学者)
- 升级php5.4 mysql5.5_在CentOS上把PHP从5.4升级到5.5
- 1. 少了一个PermMissingElem Find the missing element in a given permutation.
- spring自动扫描的注解@Component @Controller @Service @Repository
- MATLAB2014b安装
- 计算机等级考试Excel总成绩,计算机等级考试EXCEL练习题-6公务员考试成绩表
- 工程总承包(EPC)最高投标限价政策解说
- Java写后门,JAVA简单编写后门程序
- JS async库:parallel, series, waterfall, whilst用法
- springcloud2-注册中心eureka及nacos
- AI-DPL, you should know
- 使用阿里云消息服务mns发送短信
- 【概念理解】typedef-Lnode-*Linklist