一、事务的特性ACID
原子性(Atomic)
事务由一个或多个行为绑在一起组成,好像是一个单独的工作单元。原子性确保在事务中的所有操作要么都发生,要么都不发生。
一致性(Consistent):
一旦一个事务结束了(不管成功与否),系统所处的状态和它的业务规则是一致的。即数据应当不会被破坏。
隔离性(Isolated):
事务应该允许多个用户操作同一个数据,一个用户的操作不会和其他用户的操作相混淆。
持久性(Durable):
一旦事务完成,事务的结果应该持久化。
二、事务并发引起的问题
单个事务能保证单项业务的数据完整性,但是当多个事务同时运行时可能带来并发问题,具体体现在:
*第一类丢失更新。
当取消一个事务时会覆盖另一个事务提交更新的数据
*脏读
一个事务读取到另一个事务未提交的更新数据
*不可重复读
一个事务读取到另一个事务已提交的更新数据
*第二类丢失更新
属于不可重复读的特例,一个事务覆盖了另一个事务已提交的更新数据
*幻读。
一个事务读取到另一个事务已提交的插入的更新数据
三、解决事务并发引起的问题——设置事务的隔离级别
设定隔离级别的原则
隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。
对于多数应用程序,可以优先考虑把数据库系统的隔离级别设为Read Committed,它能够避免脏读,而且具有较好的并发性能。尽管它会导致不可重复读,虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序悲观锁和乐观锁来解决。