原创: 微笑面对生活
说起事务,大家应该多多少少用过,尤其是在一个service方法中调用多次dao操作,我们一定要用到事务( @Transational注解),那么这个事务的默认隔离级别和传播机制是什么呢?
先来讲讲 脏读 不可重复读 和 幻读。
- 脏读:我们在并发编程中是很熟悉的,通俗的讲就是你读得数据已经被修改了,已经过时失去意义了。
- 不可重复读: 同一个事务里面多次读取同一行数据,却返回不同的结果。
- 幻读:同样一笔查询在整个事务过程中多次执行后,查询所得的结果集不一样。
事务四大特性 ACID
1. 原子性 (Atomicity)
要求事务所包含的全部操作是一个不可分割的整体,如果有一步发生异常,则全部不提交。
2. 一致性 (Consistency)
A给B转钱,A减和B增这两个操作必须保持一致。
3. 隔离性 (Isolation)
事务会将一部分数据与其他事务隔离,防止脏读等。
4. 持久性 (Durability)
事务的结果被写到持久化存储器中。
事务四大隔离级别
隔离级别越高,则性能相对越低,反之亦然。1. Read Uncommitted最低的隔离级别,跟你直译的意思一样:可以读取其它事务未完成的结果。(脏读)
很明显, 脏读 不可重复读 和 幻读这三个问题它都有。
2. Read Committed
大部分数据库采用的 默认隔离级别,比上一个隔离级别多了限定:在该事务完成后,才能读取该事务的数据更新后的结果。
它可以避免脏读,但是也有不可重复读取和幻读的问题。
3. Repeatable Read</