事务的基本特性
- 原子性,都做或者都不做
- 一致性,从一个状态装换到另一个状态
- 隔离性,一个事物执行不能被其他事物干扰
- 持久性,事务提交后不能更改
事务的隔离级别
- 未提交读:一个事务内部所有的操作过程,对外都是可见的。
则A事务的中,x_a1会读到x_b1的内容,其余的以此类推,这些都是脏数据,即脏读A ---x-----------x_a1-----------x_a2---------x_a3------>commit B----x----x_b1-------->x_b2---------->x_b3----------->commit
- 提交读:一个事务内部所有操作对外都不可见,之后执行前和执行后是可见的。(仍然无法避免脏读)
A中的事务,在B没有执行完成时,都是读的原来的内容,之后提交了,x_a3就是读的提交后的内容了,原来的x也是脏数据。A ---x-----------x---------------x--------------------------x_a3------>commit B----x----x_b1-------->x_b2------->x_b3----->commit
- 可重复读:一个事务在读数据时,其他事务不能对该数据进行改变操作
上面的A事务读x,则B只能读x,不能写,因此避免了脏数据。
幻读:如果B在A操作的区间内插入数据,则A在执行事务完成后,才会发现这一行数据,这就是幻读,如果执行区间计数操作,可能不准。 - 串行化:所有的事务都是传行的,失去了并发的意义