一尘不染

事务内部的select语句与外部的select语句之间是否有区别

sql

默认的READ COMMITTED隔离级别是否会使选择语句在事务内部的行为不同于不在事务内部的select语句?

我正在使用MSSQL。


阅读 191

收藏
2021-03-17

共1个答案

一尘不染

是的,事务内部的人可以看到在其他先前插入/更新/删除语句所做的更改 交易; 事务外的Select语句不能。

如果您要问的是隔离级别的功能,那么请了解所有Select语句(嘿,任何形式的所有语句)
在事务中。显式处于事务中的事务和独立于事务中的事务之间的唯一区别是,独立的事务在执行事务之前立即开始其事务,并在执行之后立即提交或回滚。

显式地包含 在事务中的语句(因为它具有Begin
Transaction语句)可以在该Select语句之前或之后,在同一事务中包含其他语句(插入/更新/删除,无论如何)。

因此,无论将隔离级别设置为什么,两个选择(在显式事务内部或外部)都将处于以该隔离级别运行的事务中。

另外 :以下内容适用于SQL Server,但所有数据库必须以相同的方式工作。在SQL Server中,查询处理器始终处于以下三种事务模式之一:
AutoCommitImplicitExplicit

  • AutoCommit是SQL Server数据库引擎的默认事务管理模式。 _..每个Transact-SQL语句在完成时都将提交或回退。…_如果语句成功完成,则将其提交;如果遇到任何错误,它将回滚。这是默认设置,并且是注释中@Alex问题的答案。

  • 在“隐式事务”模式下,“ … SQL Server数据库引擎 在当前事务被提交或回滚后 自动 启动新事务 。您无需执行任何操作来勾勒事务的开始;您仅提交或回滚每个事务。事务处理模式会生成一个连续的事务链。”。请注意,斜体代码段适用于每个事务,无论是单语句事务还是多语句事务。

  • 当您使用Statement显式启动事务时,引擎将置于“显式事务”模式BEGIN TRANSACTION。然后,将在该事务内执行每个语句,直到您显式终止该事务(使用COMMITROLLBACK),或者发生故障导致引擎终止并回滚为止。

2021-03-17