1 事务
事务是一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性。
2 事务的ACID属性
2.1 原子性(Atomicity)
当前事务的操作要么同时成功,要么同时失败。原子性由
undo log日志来实现。
2.2 一致性(Consistent)
使用事务的最终目的,由其它3个特性以及业务代码正确逻
辑来实现。
2.3 隔离性(Isolation)
在事务并发执行时,他们内部的操作不能互相干扰。隔离性由
MySQL的各种锁以及MVCC机制来实现。
2.4 持久性(Durable)
一旦提交了事务,它对数据库的改变就应该是永久性的。持久
性由redo log日志来实现。
3 并发事务的问题
3.1 更新丢失(Lost Update)或脏写
当两个或多个事务选择同一行数据修改,有可能发生更新丢失问题,即最后的更新覆盖了由其他事务所做的更新。
3.2 脏读(Dirty Reads)
事务A读取到了事务B已经修改但尚未提交的数据
3.3 不可重读(Non-Repeatable Reads)
事务A内部的相同查询语句在不同时刻读出的结果不一致
3.4 幻读(Phantom Reads)
事务A读取到了事务B提交的新增数据