事务指的是逻辑上的一组操作,组成这组操作的各个逻辑单元要么一起成功,要么一起失败.
0. 事务的四大特性
- 原子性:强调事务的不可分割.要么全部完成,要么全部失败,失败会进行回滚,之前的操作会被回滚为事务之前的状态
- 一致性:强调的是事务的执行的前后,数据的完整性要保持一致.
- 隔离性:一个事务的执行不应该受到其他事务的干扰.
- 持久性:事务一旦结束(提交/回滚)数据就持久保持到了数据库.
1. 不考虑事务会引发的问题
- 脏读 :一个事务读到另一个事务还没有提交的数据.
- 不可重复读 :一个事务读到了另一个事务已经提交的update的数据,导致在当前的事务中多次查询结果不一致.
- 虚读/幻读 :一个事务读到另一个事务已经提交的insert的数据,导致在当前的事务中多次的查询结果不一致.
2. 事务的隔离级别
- read uncommitted :未提交读.脏读,不可重复读,虚读都可能发生.
- read committed :已提交读.避免脏读.但是不可重复读和虚读有可能发生.(Oracle默认)
- repeatable read :可重复读.避免脏读,不可重复读.但是虚读有可能发生.(MySQL默认)
- serializable :串行化的.避免脏读,不可重复读,虚读的发生.