脏读取隔离

“脏读取”隔离(或 ANSI 读取未落实)级别不在 SELECT 语句执行期间所访存的任何行上放置任何锁。对于用于查询的静态表,“脏读取”隔离非常合适。

如果同时发生更新活动,那么请小心使用“脏读取”隔离。 通过使用“脏读取”,读取器可以读取尚未向数据库落实的行,该行可能在回滚期间被消除或更改。 例如:考虑以下应用场合:
用户 1 启动事务。
用户 1 插入行 A。
用户 2 读取行 A。
用户 1 回滚行 A。

用户 2 读取行 A,几秒钟后用户 1 回滚该行。 实际上,用户 2 读取了从未落实到数据库的行。 回滚的未落实数据在应用程序中可能是个问题。

因为数据库服务器不为查询检查或放置任何锁定,脏读取隔离向所有隔离级别提供了最优性能。 但是,因为回滚的未落实数据可能有问题,所以使用脏读取隔离时请小心。

由于回滚的未落实数据问题只是事务问题,因而没有事务的数据库(从而不允许事务)使用脏读取作为缺省隔离级别。实际上,对于不具有事务日志记录的数据库,脏读取是唯一允许的隔离级别。