ArtGal пишет:
У Ивана Ивановича есть 2 подчинённых Маша и Петя.
Стартуем две параллельные транзакции.
В первой Петю подчиняем Маше, во второй Машу - Пете.
Комитем обе.
Сработает только первый commit.
Второй получит еггог.
У тебя параллельно транзакции выполняются? Не точно не последовательно?

У меня или висит, если wait, или получает
lock conflict on no wait transaction violation of FOREIGN KEY constraint "DM_GR_DM_GR" on table "DM_GR" Foreign key reference target does not exist
Вне зависимости от rec_version или no_rec_version.

А вот если чуть изменить пример:
Исходно:
ID      PARENT_ID       NAME
1               Иван Иванович
2       1       Петя
3       1       Маша
4       2       Глаша
Добиваемся:
ID      PARENT_ID       NAME
1               Иван Иванович
2       3       Петя
3       4       Маша
4       2       Глаша
То при no_rec_version можем увидеть:
fetch: lock conflict on no wait transaction  deadlock

Ну и если грохнуть FK, то при no_rec_version тот же дедлок, а при rec_version - создаётся цикл.

Еггог из триггера выскакивает только при последовательном выполнении.

Т.е. конфликт, цикл, при параллельном выполнении не создаётся из-за FK, а не из за явной проверки процедурой.

Кто-нибудь сможет объяснить, откуда здесь violation of FOREIGN KEY?
--
Александр Замараев

Ответить