文章目录
1、事务
定义:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。
2、ACID
ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability).这是可靠数据库所应具备的几个特性.下面针对这几个特性进行逐个讲解.
2.1 原子性 Atomicity
原子性指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2.2 一致性 Consistency
一致性是指在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏。这是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
保证事务的一致性,可以从以下两个层面入手:
-
数据库机制层面
数据库层面的一致性是,在一个事务执行之前和之后,数据会符合你设置的约束(唯一约束,外键余数等)和触发器设置。这一点是由SQL SERVER进行保证的。比如转账,则可以使用CHECK约束两个账户之和等于2000来达到一致性目的 -
业务层面
对于业务层面来说,一致性是保持业务的一致性。这个业务一致性需要由开发人员进行保证。
2.3 隔离线 Isolation
多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其他事务运行效果。
这指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。由并发事务所做的修改必须与任何其他并发事务所做的修改隔离。事务查看数据更新时,数据所处的状态要么是另一事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看到中间状态的数据。
2.3.1 事务之间的互相影响
事务之间的互相影响分为几种,分别是:脏读、不可重复读、幻读、丢失更新
- 脏读:一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的。
- 不可重复读:在数据库访问中,一个事务范围内两个相同的查询却返回了不同的数据。这是由于查询时系统中其他事务修改的提交而引起的。
- 幻读(虚读):指当事务不是独立执行时发生的一种现象。例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样.
- 丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录(B是不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。
2.4 持久性 Durability
意味着在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。