理解在数据库系统中,事务是相当重要的一环,也正是事务的存在为数据提供安全保障和数据恢复能力。
- 事务特性
- 原子性:一个事务中的所有操作都是一个整体,要么全都执行成功,要么执行失败全都回滚。
- 一致性:一个事务执行前的数据总和必须和执行后的数据总和保持一致,例如A银行卡有100元、B银行卡有100元,A给B转账50元,不管中间进行了什么操作,最后的银行卡总和一定还是200元。
- 隔离性:一个事务是看不到另一个事务正在进行的操作。
- 持久性:数据执行提交后,会永久的保存到磁盘上。
- 事务隔离级别
结束事务隔离级别主要就是解决事务并发出现的问题,例如脏读(读取到没有提交的数据)、不可重复读(一个事务中的两次查询,查到的数据不一样,有其他事务对查询的记录进行了修改操作)、幻读(一个事务中的两次查询,查到的数据不一样,有其他事务对此表记录进行了插入或删除操作)
- 读未提交:可以读取到未提交的数据,因为在这种查询下不会加锁,导致一致性非常差,可能会产生脏读、不可重复读、幻读。
- 读已提交:读取到的数据是提交之后的,这个隔离级别也是Oracle的默认隔离级别,能够有效的防止脏读的问题。
- 可重复读:这个隔离级别同样也是只能读取到已提交的数据,是MySql的默认隔离级别,和读提交不同的是,当事务开始之后,就对相应的行数据进行加锁操作,避免了别的事务对数据的修改而导致的不可重复读,但此隔离级别是无法避免幻读,因为幻读是别的事务对表进行插入或者删除操作导致的,需要进行表锁才能够避免。
- 串行化:最高隔离级别,所有事务都需要排队执行,避免了脏读、不可重复读、幻读,但执行效率极差。



