READ COMMITTED 隔离
使用隔离级别 READ COMMITTED
时,一个 SELECT
查询会获取在事务开始时已提交的数据的备份。在当前事务期间内执行的后续查询也会查看已在同一个事务内执行的未提交更新的结果。
使用 DML 语句时,您的查询会获取写入锁,以防止其他 READ COMMITTED
事务修改相同的数据。但是,需要注意的是,SELECT
语句不会获取锁,因此并发事务可以获得对相同所选内容的读取和写入访问权限。
READ COMMITTED
是默认隔离级别。对大多数查询来说,此隔离级别可在数据库一致性和并发性之间取得平衡。但是,此隔离级别允许在一个事务正在访问数据期间,另一个事务仍可更改这些数据。此类更改会产生
不可重复的读取和
虚拟读取。您的应用程序可能有着复杂的查询和更新要求,需要获得更一致的数据库视图。如果是这样,请改用 SERIALIZABLE 隔离。
下图说明了 READ COMMITTED
隔离如何控制并发事务读取和写入相同数据:
READ COMMITTED
隔离会在事务结束之前保持独占写入锁,如下图所示: