首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Server中使用触发器和不同的隔离级别来处理嵌套事务?

如何在Server中使用触发器和不同的隔离级别来处理嵌套事务?
EN

Stack Overflow用户
提问于 2020-05-28 20:17:06
回答 1查看 430关注 0票数 2

我要回答两个问题。以下是一个概述:

我有三张桌子:

代码语言:javascript
复制
CREATE TABLE A(x INT)
CREATE TABLE B(x INT)
CREATE TABLE C(x INT)

和2个触发器:

代码语言:javascript
复制
ALTER TRIGGER ATr ON A
FOR INSERT AS
BEGIN
    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

    INSERT INTO B 
        SELECT * 
        FROM inserted;
    COMMIT
END

ALTER TRIGGER BTr ON B
FOR INSERT AS
BEGIN
    INSERT INTO C 
        SELECT * FROM inserted;
END

而插入触发ATr触发器INSERT INTO A VALUES(3)是在可重复读取隔离级别上完成的,并提交了该数据库的默认隔离级别。

我需要回答两个问题:

  • ATr将在哪个隔离级别上执行?
  • BTr将在哪个隔离级别上执行(如果有的话)?

我很难理解这些嵌套事务是如何工作的。级别SERIALIZABLE事务中的任何事务会执行吗?在这种情况下,它们甚至嵌套吗?如果较低的隔离级别在较高的隔离级别内或相反的情况下会发生什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-28 20:44:44

这种行为记录在这里,设置事务隔离级别

并且您可以通过运行

代码语言:javascript
复制
select CASE transaction_isolation_level
WHEN 0 THEN 'Unspecified'
WHEN 1 THEN 'ReadUncomitted'
WHEN 2 THEN 'ReadCommitted'
WHEN 3 THEN 'Repeatable'
WHEN 4 THEN 'Serializable'
WHEN 5 THEN 'Snapshot' END AS transaction_isolation_level
from sys.dm_exec_requests
where session_id = @@spid 

无论您对当前的主动隔离级别有什么好奇。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62073772

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档