我可以在SET TRANSACTION ISOLATION LEVEL SERIALIZABLE之后添加提交的读取吗?


9

在存储过程中,我具有以下内容:(sql server 2008)

 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
 BEGIN TRANSACTION getStuff
 BEGIN TRY 
    /*  some selects, updates, etc, etc. */
    ....
    COMMIT TRANSACTION getStuff
 END TRY
 BEGIN CATCH 
   ...
 END CATCH

由于这是基于事务的,因此我认为其余的数据库连接将不受SERIALIZABLE的影响。

我是否需要隐式设置隔离级别以在提交后读取提交?这会对我的应用程序服务器和数据库服务器之间的其他连接产生不利影响吗?

Answers:



5

不,您不必隐式地将隔离级别设置回读取已提交。

在线书籍。

如果在存储过程或触发器中发出SET TRANSACTION ISOLATION LEVEL,则当对象返回控件时,隔离级别将重置为调用对象时有效的级别。例如,如果您在批次中设置了REPEATABLE READ,然后该批次调用了将隔离级别设置为SERIALIZABLE的存储过程,则当存储过程将控制权返回给该批次时,隔离级别设置将恢复为REPEATABLE READ。


3

您发布的命令只需使用即可在SP中运行事务TRANSACTION ISOLATION LEVEL SERIALIZABLE。其他连接将默认为默认隔离级别-读取已提交(除非明确指定其他隔离级别)。

Paul White提供了一个出色的系列-《SQL Server隔离级别:该系列》,可以帮助您深入了解不同的隔离级别在使用时的含义和用途。


-3

一种相当新的算法,可以避免以前方法的大多数缺点。它使用一种乐观的方法,允许事务继续进行而不会阻塞。当事务要提交时,将对其进行检查,如果执行不可序列化,则将其中止。有关所有方法的更多详细信息,请访问:http ://writeulearn.com/relational-database-transactions/


这似乎并不是问题的答案
。...– RDFozz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.