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?
--
Александр Замараев