事务的四大特征
- 原子性。每个事务要么全部执行要么不执行
- 一致性。要有一定的束缚,在业务中并不会导致数据的不一致
- 隔离性。事务之间互不影响
- 持久性。对数据做出的改动在事务结束前必须持久化到数据库中
事务由什么保证?
- 原子性由undolog日志保证,它记录了事务回滚的日志,在事务需要会跟的时候会撤销已执行的sql
- 一致性由其他三大特性来保证
- 隔离性由mvcc保证
- 持久性由redolog来保证,mysql保存数据时都会在redolog中保存一份,就算数据没保存成功,但只要redolog日志还在,数据就不会丢失
四个事务隔离级别
- READ_UNCOMMITTED已读未提交
- READ_COMMITTED已读已提交
- REPEATABLE_READ可重复读
- SERIALIZABLE串行化
脏读 | 不可重复读 | 幻读 | |
READ_UNCOMMITTED | √ | √ | √ |
READ_COMMITTED | √ | √ | |
REPEATABLE_READ | √ | ||
SERIALIZABLE |
脏读、幻读、不可重复读
- 脏读:一个事务读取到另一个事务未保存的数据
- 幻读:一个事务读取两次数据的条数,由于第二个事务对数据修改导致第一个事务两次读取的条数不一致
- 不可重复读:一个事务读取两次数据的条数,由于第二个事务对数据修改导致第一个事务两次读取的内容不一致