首先提到事务,我们的第一反应就是 ACID,是的我们事务拥有四大特性:
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
顾名思义,事务的四大特性非常好理解,所有今天我们只掰扯掰扯隔离性喽~
迎面向我们走来的是MVCC(Multiversion Concurrency Control多版本并发处理机制)项目,首先看看 mysql 的代表队的英勇表现。
mysql 对待事务有 4 种处理方式,表示对事务的不同态度。
- 读未提交(read-uncommitted):在不同的事务内,可以看到其他事务修改过未提交的数据。对其他事务非常的放心,你想看就看喽~
- 读已提交(read-committed):在不同的事务内,不能看到其他事务未提交的数据,但是其他事务提交数据改动,可以在当前事务中发生变化的。这下好了,你敢提交我就敢看,豪横~
- 可重复读(repeatable-read):在不同的事务内,事务未提交前,获取的数据不会随着其他事务的提交而改变。没办法,只能忙完才能出去看看隔壁小姐姐更新的动态了~
- 串行化(serializable):哦豁,直接上锁~我不管一次我就只执行一个事务处理,所以就效率比较低,但是保证安全嘞
每个事务的隔离级别不尽相同,一定要针对于业务的需求对并发和隔离有不同的取舍。
小提示 mysql 的日志文件不要混淆哦,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(bin log)、错误日志(error log)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。
oracle数据库的默认隔离级别其实就是“读提交”,mysql 默认隔离机制是“可重复读”。
以下还涉及 Spring的七种事务传播行为,咱们改天再聊咯。。。