Microsoft SQL Server中表的事务隔离级别



这更多的是对我想法的确认,而不是一个问题。可以在SQL Server中以表为基础更改隔离级别吗?也可以仅在会话级别上定义/更改隔离级别,如下面的语句所示?

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

所以在Microsoft SQL Server中没有什么比这更好的了?

ALTER DATABASE SET DEFAULT TRANSACTION ISOLATION LEVEL SERIALIZABLE

或者类似的东西?

CREATE TABLE T(A INT) TRANSACTION ISOLATION LEVEL SERIALIZABLE

我读过的相关问题和答案:

  • https://dba.stackexchange.com/questions/221548/is-it-possible-to-set-default-transaction-isolation-for-all-connections-in-sql-s
  • 如何更改隔离级别
  • https://learn.microsoft.com/en-us/sql/t-sql/statements/set-transaction-isolation-level-transact-sql?view=sql-server-ver15#:~:text=%20事务%20隔离%20级别%20定义,由%20读取%20引用%20

您可以更改连接的隔离级别,但不能更改table的隔离级别。但是,您可以在某些联接上设置锁定行为,但是这可以在执行某些查询时改善锁定争用。

对于SQL Server事务隔离级别只能在会话(连接(级别strong>处于登录和注销之间

例如,在为事务隔离级别设置SERIALIZABLE之后:

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
GO

然后,注销:

exit

然后,再次登录:

sqlcmd /S DESKTOP-HN1U0MESQLEXPRESS /E

然后,事务隔离级别重置为READ COMMITTED:

DBCC USEROPTIONS
GO
Set Option                  Value
--------------------------- --------------
textsize                    4096
language                    us_english
dateformat                  mdy
datefirst                   7
lock_timeout                -1
quoted_identifier           SET
arithabort                  SET
ansi_null_dflt_on           SET
ansi_warnings               SET
ansi_padding                SET
ansi_nulls                  SET
concat_null_yields_null     SET
isolation level             read committed <- Here

最新更新