事务是并发控制的基本单位,保证事务的ACID特性是事务处理的重要任务,但是多个事务对数据库的并发操作可能会破坏事务的ACID特性,为了保证事务的隔离性和一致性,就需要对并发操作进行调度。
一、事务的ACID特性分别是:
A:原子性,就是说要么都做,要么都不做;举个例子,某公司在银行有A,B两个账号。现在公司想从账号A中取出一万元,存入账号B,那么就可以定义一个事务,该事务包含两个操作,第一个操作是从账号A中减去一万元,第二个操作是向账号B中加入一万元,这两个操作要么全做,要么全不做。全做或者全不做,数据库都是处于一致性状态。
C:一致性,与原子性密切相关,就是说事务的执行结果必须是使数据库从一个一致性状态变到另一个一致性状态。
I:隔离性,一个事务的执行不能被其他事务干扰。即一个事务的内部操作及其使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
D:持续性,指一个事务一旦提交,它对数据库中的数据的改变就是永久性的,接下来的其他操作或故障不应该对其执行结果有影响。
二、事务的acid特性可能遭到破坏的因素有:
1.多个事务并行运行时,不同事务的操作交叉执行。 2.事务在运行过程中被强行停止。
三、并发出现的问题
1.丢失数据
两个事务T1和T2读入同一数据并修改,T2的提交结果破坏了T1提交的结果,导致T1的修改被丢失。
2.不可重复读
就是说事务T1读取数据后,事务T2对其进行更新操作(包括修改数据,添加数据,删除数据),导致T1再次读出不一样的数据。后两者又叫幻影现象。
3.读“脏”数据
是指事务T1修改了某一数据并将其写回到磁盘,事务T2读取同一数据后,T1由于某种原因被撤销,这时被T1修改过的数据恢复原值,T2读到的数据与数据库中的数据不一样,则T2读到的数据就为“脏”数据。
四、控制技术—封锁