mysql事务
事务的四个特性
原子性 | 全成功,全失败 | undo日志 |
一致性 | 数据合法的从一种状态转移为另一种状态(符合约束) | undo日志 |
隔离性 | 一个事务不受另一个事务影响 | 锁 |
持久性 | 事务一旦提交就不可改变 | redo日志 |
事务的四个隔离级别
脏读 | 不可重复读 | 幻读 | 数据库默认 | ||
读未提交 | √ | √ | √ | 一个事务读到了另一个事务未提交的数据 | |
读已提交 | × | √ | √ | oracle | 一个事务读到了另一个事务已经提交了的数据 |
可重复读 | × | × | √ | mysql | 一个事务读到了另一个事务已经提交了的数据,但依旧返回之前读到的数据 |
串行化 | × | × | × |
mvcc
隐藏字段(trx_id,roll_pointer)、Undo Log、Read View。
读已提交模式 | 生成新的Read View | 假如事务1的trx_id是1 事务2的trx_id是2。 则事务2只能读到事务1已经提交了的数据 |
可重复读模式 | 不生成新的Read View | 假如事务1的trx_id是1 事务2的trx_id是2。 则事务2无论再次读的时候其trx_id依旧是2所以事务1是否提交,事务2读到的数据都一样 |
可重复读模式 | 不生成新的Read View | 假如事务1的trx_id是1 事务2的trx_id是2。则事务2添加数据行之后,事务1再次读trx_id依旧是1,所以事务1读到的数据依旧和原来一样 |