这更多的是对我想法的确认,而不是一个问题。可以在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