一、事务的组成:
事务可由一条非常简单的SQL语句组成,也可以由一组复杂的SQL语句组成。
在事务中的操作,要么都执行修改,要么都不执行,这就是事务的目的,也是事务模型区别于文件系统的重要特征之一。
二、事务的四大特性:
A( atomicity),原子性。
原子性指整个数据库事务是不可分割的工作单位。只有使事务中所有的数据库操作都执行成功,整个事务的执行才算成功。事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。
C( consistency),一致性。一致性指事务将数据库从一种状态转变为另一种一致的状态。在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。
I ( isolation),隔离性。事务的隔离性要求每个读写事务的对象与其他事务的操作对象能相互分离,即该事务提交前对其他事务都不可见,这通常使用锁来实现。
D( durability)),持久性。事务一旦提交,其结果就是永久性的,即使发生宕机等故障,数据库也能将数据恢复。持久性保证的是事务系统的高可靠性,而不是髙可用性。
三、数据并发带来的问题
数据库并发会带来脏读、不可重复读、幻读这三个常见问题。
脏读:在第一个修改事务和读取事务进行的时候,读取事务读到的数据为100,这是修改之后的数据,但是之后该事务满足一致性等特性而做了回滚操作,那么读取事务得到的结果就是脏数据了。
不可重复读:T2 读取一个数据,然后T1 对该数据做了修改。如果 T2 再次读取这个数据,此时读取的结果和第一次读取的结果不同。
幻读:一般是T1在某个范围内进行修改操作(增加或者删除),而T2读取该范围导致读到的数据是修改之间的了,强调范围。
四、事务的隔离级别
SQL标准定义了四种隔离级别,这四种隔离级别分别是:
未提交读、提交读、不可重复读、串行化读
事务的隔离是为了解决脏读、不可重复读、幻读的问题,四种隔离级别对三类问题的解决如下:
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
未提交读 | 未解决 | 未解决 | 未解决 |
提交读 | 解决 | 未解决 | 未解决 |
可重复读 | 解决 | 解决 | 未解决 |
串行化读 | 解决 | 解决 | 解决 |