Мне нужно ответить на два вопроса. Вот обзор:
У меня есть 3 таблицы:
CREATE TABLE A(x INT)
CREATE TABLE B(x INT)
CREATE TABLE C(x INT)
и 2 триггера:
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
и INSERT, запускающий триггер ATr INSERT INTO A VALUES(3)
, выполняется на Уровень изоляции REPEATABLE READ, а уровень изоляции по умолчанию для этой базы данных - READ COMMITTED.
И мне нужно ответить на два вопроса:
- На каком уровне изоляции будет выполняться триггер ATr?
- На каком уровне изоляции будет выполняться триггер BTr (если вообще)?
У меня проблемы с пониманием того, как эти вложенные транзакции будут работать. Будет ли когда-либо выполняться какая-либо транзакция внутри транзакции LEVEL SERIALIZABLE? Они вообще в этом случае вложены? Что произойдет, если более низкий уровень изоляции находится внутри более высокого уровня изоляции или наоборот?