脏读
| 事务1 | 事务2 |
|---|---|
| beginTransaction | beginTransaction |
| 访问并修改 | 无操作 |
| 无操作 | 读取数据 |
| 无操作 | commit |
| rollback | 无操作 |
事务2获取到的数据就是脏数据
幻读
| 事务1 | 事务2 |
|---|---|
| beginTransaction | beginTransaction |
| 访问sex为1的数据总数(100) | 无操作 |
| 无操作 | 新插入一条sex为1的数据 |
| 访问sex为1的数据总数(101) | 无操作 |
| 无操作 | rollback |
| 懵逼脸 | 嘻嘻嘻 |
由于事务2的插入操作,造成事务1的幻读
幻读的重点是新增和删除
不可重复读
在一个事务中前后读取到的数据不一样,就是不可重复读
| 事务1 | 事务2 |
|---|---|
| beginTransaction | beginTransaction |
| 访问id为1的math字段(88) | 无操作 |
| 无操作 | 修改id为1的math字段(100) |
| 无操作 | commit |
| 访问id为1的math字段(100) | 无操作 |
| 懵逼脸 | 嘻嘻嘻 |
由于事务2的修改操作,造成事务1对数据的不可重复读
不可重复读的重点是修改(如果在修改数据期间,不允许访问此数据,则可以预防不可重复读)
脏读和不可重复读的区别在于,脏读未commit,其他事务都可以查询到未提交的数据,而不可重复读,是在一个事务commit的前后,其他事务读取两次数据(且数据前后不一致)
