gpt4 book ai didi

Azure SQL - 使用 ADO.NET 时的默认隔离级别

转载 作者:行者123 更新时间:2023-12-02 08:00:18 26 4
gpt4 key购买 nike

在 Azure SQL 中,默认隔离级别是 RCSI。我理解这种行为。据我了解,对我来说,在通过简单的 ADO.NET SqlConnection 选择数据时需要使用已提交读。我很难理解在进行简单选择时是否应用行版本控制。使用 SqlConnection 时应用的默认隔离级别是什么?

编辑从这里:https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/sql/snapshot-isolation-in-sql-server#snapshot-isolation-level-extensions

我读过

The READ_COMMITTED_SNAPSHOT database option determines the behavior of the default READ COMMITTED isolation level when snapshot isolation is enabled in a database. If you do not explicitly specify READ_COMMITTED_SNAPSHOT ON, READ COMMITTED is applied to all implicit transactions. This produces the same behavior as setting READ_COMMITTED_SNAPSHOT OFF (the default). When READ_COMMITTED_SNAPSHOT OFF is in effect, the Database Engine uses shared locks to enforce the default isolation level. If you set the READ_COMMITTED_SNAPSHOT database option to ON, the database engine uses row versioning and snapshot isolation as the default, instead of using locks to protect the data.

这是否意味着数据库只是将所有默认事务升级到 RCSI,因此如果未指定特定事务级别,它将行版本控制应用于所有内容?所以SqlConnection只是默认为RCSI而不是默认的读已提交。

最佳答案

Azure SQL 数据库默认数据库范围设置是通过将 READ_COMMITTED_SNAPSHOT 和 ALLOW_SNAPSHOT_ISOLATION 数据库选项设置为 ON 来启用读已提交快照隔离 (RCSI)。您无法更改数据库默认隔离级别。但是,您可以显式控制连接上的隔离级别。执行此操作的一种方法是,在开始事务之前,可以在 Azure SQL 数据库中使用以下任一语句:

SET TRANSACTION  ISOLATION LEVEL  SERIALIZABLE
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

SET TRANSACTON ISOLATION LEVEL 控制由 SQL Server 连接发出的 Transact-SQL 语句的锁定和行版本控制行为,并跨批处理(GO 语句)。以上所有内容的工作方式与 SQL Server 完全相同。

此外,上述语句“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”会将隔离级别设置为读已提交快照隔离(RCSI)。此隔离级别不同于已提交读 (RC)。换句话说,“SET TRANSACTION ISOLATION LEVEL READ COMMITTED”在本地 SQL Server 中的默认行为是 RC,但在 Azure SQL 数据库中是 RCSI。如果要在 Azure SQL 数据库中使用精确的 RC(而不是 RCSI)行为,您必须将锁 hint READCOMMITTEDLOCK 设置到 SQL 语句。

关于Azure SQL - 使用 ADO.NET 时的默认隔离级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57545871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com