sql - 事务内部的 SELECT 语句与事务外部的 SELECT 语句之间有区别吗?

标签 sql sql-server select transactions

默认的READ COMMITTED隔离级别是否以某种方式使SELECT语句在事务内部的行为与事务不同不在交易中的一个?

我正在使用MS SQL .

最佳答案

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

如果您所询问的只是隔离级别的作用,那么请了解所有 Select 语句(嘿,任何类型的所有语句)- 在事务中。显式存在于事务中的事务和独立事务之间的唯一区别在于,独立事务在执行事务之前立即启动事务,并在执行后立即提交或回滚;

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

因此,无论隔离级别设置为何,两个选择(显式事务内部或外部)都将位于在该隔离级别下操作的事务中。

添加: 以下是针对 SQL Server 的,但所有数据库必须以相同的方式工作。在 SQL Server 中,查询处理器始终处于 3 种事务模式之一:自动提交隐式显式

  • AutoCommit是SQL Server数据库引擎的默认事务管理模式。 .. 每个 Transact-SQL 语句在完成时都会提交或回滚。 ... 如果一条语句成功完成,则它被提交;如果遇到任何错误,则会回滚。这是默认值,也是评论中 @Alex 问题的答案。

  • Implicit Transaction模式,“... SQL Server 数据库引擎在当前事务提交或回滚后自动启动一个新事务。您无需执行任何操作来描述事务的开始;您只需提交或回滚每个事务。隐式事务模式生成连续的事务链。...”请注意,斜体代码片段针对每个事务,无论是单语句事务还是多语句事务。

  • 引擎位于 Explicit Transaction当您使用 BEGIN TRANSACTION 语句显式发起事务时的模式。然后,每个语句都会在该事务中执行,直到您显式终止事务(使用 COMMIT 或 ROLLBACK),或者发生导致引擎终止并回滚的故障。

关于sql - 事务内部的 SELECT 语句与事务外部的 SELECT 语句之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1976686/

相关文章:

MySQL根据第三个外键从2个表中加入数据,没有重复或分组依据

mysql - 有没有办法在 MySQL 中执行 INSERT 或 SELECT?

mysql - 使用 WHERE 条件作为查询结果中的列名

sql-server - ElasticSearch 没有拉出整个 SQL 表

c# - 检查数据库中删除了哪些记录以更新应用程序集合的有效方法

sql - 如何重写 SQL 查询以从 GROUP BY 列中删除冗余值?

sql - sql数据库的高效设计

php - MySQL:没有选择数据库错误

sql-server - SSIS 设计器 Visual Studio 外键集成

select - DataStax DevCenter 的 count(*) 问题