数据库事务的四大特性
事务(Transaction)是并发控制的基本单位。所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,他是一个不可分割的工作单位。例如,账户资金的流转:从一个账号到另一个账号,在扣款的同时增加另一个账号的资金,这两个操作要么同时执行,要不都不执行。
一、数据库事务必须具备ACID特性,ACID:
Atomicity:原子性;
Consistency:一致性;
Isolation:隔离性;
Durability:持久性。
1、原子性:
一个事务中的所有操作,要么全部完成,要么全部不完成,不会结束在中间的某个环节。事务在执行过程中发生错误,会被回滚到事务开始前的初始状态,相当于没有做任何操作。
2、一致性:
事物的一致性是指在一个事务执行之前和执行之后数据库都处于一致性状态。如果事务成功的完成,那么系统中所有的变化都将正确的应用,系统处于有效状态。如果事务中出现问题,那么系统的所有变化将自动的回滚,系统返回原始状态。
3、隔离性:
在并发环境中,但不同的事务同时操纵相同的数据是,每个事物都有各自的完整的数据空间。有并发事务所作的修改必须与其它任何一个并发事务所作的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是其它某个事务修改它之后的状态,事物不会查看到中间状态的数据。
4、持久性:
只要事务成功的执行结束,食物对数据库的修改和更新将会永久保存下来,即使发生系统崩溃,重启数据库之后,还行恢复到事务成功结束后的状态。
二、读数据的概念:
1、脏读(Dirty Reads):
所谓脏读就是对脏数据的读取,而脏数据是指未进行提交的数据,也就是说,一个事务正在对一条记录做修改,在这个事务完成并提交之前,这条数据是出于待定状态的(提交或回滚),这时,第二个事务来读取这条没有提交的数据,并据此作进一步的处理,就会产生未提交的数据依赖关系,这种现象被称为脏读。
2、不可重复读(Non-Repeatable Reads):
一个事务先后读取同一条记录,但两次读取的数据不同,我们称之为不可重复读。也就是说,这个事务在两次读取之间该数据被其他事务所修改。
3、幻读(Phantom Reads):
一个事物按相同的查询条件重新读取之前查询过的数据,却发现其它事务插入了满足其查询条件的新数据,这种现象就成为幻读。
摘自:
数据库事务四大特性