如标题所示,看到RU、RC、RR把人整懵圈了,知道代表的是事务的隔离级别,但具体含义却记不得了,所以记录、回顾一下。
SQL中的事务隔离级别定义了事务在并发环境下如何相互隔离,以避免并发事务之间的各种问题,如脏读、不可重复读和幻读。不同的数据库管理系统可能支持不同的隔离级别,但大多数遵循SQL标准的数据库系统,包括MySQL和PostgreSQL,都支持以下四个隔离级别:
- 读未提交(Read Uncommitted):
- 在这个隔离级别下,事务可以读取到其他事务未提交的数据。这意味着可能会读到“脏数据”,即其他事务中途放弃的修改数据。
- 称呼:在实际应用中,这个级别有时被称为“脏读”级别,因为它允许读取到其他事务未最终确定的数据。
- 读已提交(Read Committed):
- 事务只能读取到其他事务已经提交的数据。这个级别可以避免脏读,但是不能避免不可重复读,因为同一事务的两次读取之间,其他事务可能已经提交了新的数据。
- 称呼:在实际应用中,这个级别有时被称为“读已提交”级别,强调只能读取到已经提交的数据。
- 可重复读(Repeatable Read):
- 事务在整个过程中可以多次读取到相同的数据集,即使其他事务提交了新的数据。这个级别可以避免脏读和不可重复读,但是不能避免幻读,即在事务过程中新插入的数据。
- 称呼:在实际应用中,这个级别有时被称为“可重复读”级别,强调在同一个事务中多次读取的数据是一致的。
- 串行化(Serializable):
- 这是最高的隔离级别,事务会完全隔离,事务的执行就像是在串行环境中一样,事务依次逐个执行,避免了脏读、不可重复读和幻读。
- 称呼:在实际应用中,这个级别有时被称为“串行”级别,因为它通过完全隔离事务来保证数据的一致性。
在实际应用中,选择哪个隔离级别取决于业务需求和性能考虑。较低的隔离级别(如读未提交和读已提交)可能会提高并发性能,但牺牲了数据的一致性。较高的隔离级别(如可重复读和串行化)提供了更强的数据一致性保证,但可能会降低并发性能。