一、数据库的事务隔离级别
二、Spring的事务隔离级别
Q:事务隔离级别设置得越高越好?
A:并不是越高越好。
事务隔离级别设置得越高,意味着势必要花手段去加锁用以保证事务的正确性,那么效率就要降低,因此实际开发中往往要在效率和并发正确性之间做一个取舍,一般情况下会设置为READ_COMMITED,此时避免了脏读,并发性也还不错,之后再通过一些别的手段去解决不可重复读和幻读的问题就好了。
Spring的事务隔离级别 | 数据库的事务隔离级别 | 脏读 | 不可重复读 | 幻读 | 加锁读 |
---|---|---|---|---|---|
DEFAULT | 使用数据库本身使用的隔离级别 ORACLE(已提交读) MySQL(可重复读) | ||||
READ_UNCOMITTED | 未提交读 read uncommitted | √ | √ | √ | |
READ_COMMITED | 已提交读 read committed | √ | √ | ||
REPEATABLE_READ | 可重复读 repeatable read | √ | |||
SERLALIZABLE | 可序列化 serializable | √ |
1、DEFAULT
使用数据库本身使用的隔离级别
ORACLE(已提交读)
MySQL(可重复读)
2、READ_UNCOMITTED
3、READ_COMMITED
4、REPEATABLE_READ
5、SERLALIZABLE
可序列化,串行化,最高的事务隔离级别,挨个执行事务(执行完一个事务才能执行另外一个事务),这样就解决了脏读、不可重复读和幻读的问题了