SQL-92 标准定义了 4 种隔离级别来解决脏读、幻读、不可重复读等这些异常情况,从高到底依次为:
可串行化(Serializable)、可重复读(Repeatable reads)、读已提交(Read committed)、读未提交(Read uncommitted)。
1. 读未提交(RU):
最低的隔离级别,在这种事务隔离级别下,允许一个事务读取另一个事务尚未提交的数据。
这可能导致脏读、不可重复读和幻读的问题。
2. 读已提交(RC):
也可以翻译成提交读,在一个事务修改数据过程中,如果事务还没提交,其他事务不能读该数据。
这可以避免脏读问题,但仍可能出现不可重复读和幻读的问题。
3. 可重复读(RR):在一个事务中,多次读取同一数据时,得到的结果保持一致。
即使其他事务对数据进行了修改并提交,当前事务读取的数据也不会发生变化。
比提交读更高一个级别的隔离级别,可重复读可以避免脏读和不可重复读问题,但仍可能出现幻读的问题。
4. 串行化(Serializable):最高的隔离级别,确保事务之间完全隔离,一个事务执行时,其他事务无法对其进行并发操作。
串行化可以避免脏读、不可重复读和幻读的问题,但会降低并发性能。
这些隔离级别按照隔离强度逐渐增强,同时也伴随着性能的降低。
选择适当的隔离级别需要根据具体的业务需求和并发访问情况进行权衡。