事务的四大特性: ACID
- 原子性:事务执行要么全部成功,要么全部失败回滚。
- 一致性:事务在提交之前和提交之后数据是一致的;例如A有100元,B有100元,A转给B 50元,那么A+B也还是200元。
- 隔离性:并发事务的时候,每个事务开始到结束过程中都是相对独立的,不会受其他事物的影响。
- 持久性:事务提交之后对数据的修改是持久的,哪怕这时服务器宕机了,也不会对这条数据有什么影响。 事务的原子性、隔离性、持久性都是为了一致性。
并发事务带来的几个问题:
- 脏读: T1事务读取A=100数据并且进行修改A-10但是未提交,期间T2事务读取A数据并且修改A数据A+30,因为这个数据是修改了但是没提交的,依照脏数据做的操作是不正确的。
- 不可重复读:T1事务多次读取A=100数据,期间T2事务读取A数据并且修改A数据A+30,此时在事务A中读取道的数据前后不一致。
- 幻读: T1事务多次读取区间数据,期间T2事务新增/删除几条数据,此时在事务A中读取到区间内的数据条数不一致。
事务的隔离级别:
- 读未提交:最低的隔离界别,允许读取到未提交的数据变更。
- 读已提交:只能读取事务提交之后的数据。可以防止脏读的发生。但不能防止幻读和不可重复读。
- 可重复读:对同一事务的多次读取结果都是一样的,除非是事务本省去修改,可以防止脏读和不可重复读。
- 串行化 :最高的隔离级别,所有的事务都依次执行 这样事物之间就互不干扰,该级别可防止脏读,不可重复读以及幻读。
以上内容是在面试复习过程中遇到觉得比较重要的模块,以此作为复习过的记录,如有说法有不准确请各位大牛多多指正