2013-10-04 2 views
3

Я надеюсь, что вы можете помочь мне в некоторой теории SQL, так как я не уверен на 100%, как это работает.Когда срабатывает триггер AFTER DELETE

Если у меня есть триггер, и я определяю его как

AFTER DELETE ON xxxx 

Мне было интересно, когда именно это будет стрелять, с точки зрения управления транзакциями?

Так что, если я удалю запись из своей таблицы, я предполагаю, что триггер не будет срабатывать, пока я не наберу commit и не завершу транзакцию. Это верно?

Если да, то я предполагаю, что если фиксация в моем операторе удаления работает, но триггер по какой-то причине не работает, тогда только триггер будет откат назад, а исходное исполняемое заявление удаления, которое я выполнил, все равно будет выполнено (потому что Я определил его как ПОСЛЕ УДАЛЕНИЯ).

Может кто-нибудь, пожалуйста, подтвердите это?

Спасибо.

+0

Какая СУБД вы используете? Postgres? Oracle? –

ответ

4
1. You delete a row on TABLE1 no COMMIT; 
2. TRIGGER performs an action (This takes place before COMMIT or ROLLBACK for step1, but trigger will not have any commit or rollback in it) 
3a. You apply commit - Both step1 and step2 gets completed . 
3b. You apply rollback- Both step1 and step2 rolled back. 

Либо вы даете 3a или 3b

+0

Отличное объяснение, спасибо! –

0

Триггер AFTER DELETE запускается после выполнения инструкции удаления и до того, как элемент управления возвращается пользователю, то есть он воспринимает оператор удаления и код, выполняемый после него в триггере, как одно действие (при условии, что триггер просто делает DML и ничего не напуган, как называть UTL_TCP :-)).

Это не имеет никакого отношения к управлению транзакциями - после запуска триггера DELETE и AFTER DELETE вы можете выполнить фиксацию, откат или продолжить выполнение операторов DML в одной транзакции.

2

Цель SQL триггеров для обеспечения ссылочной последовательности. Но когда они будут рассмотрены в отдельной транзакционной фиксации, будет возможность оставить данные в противоречивом состоянии.

Таким образом, триггер удаления выполняется в тот момент, когда вы выполняете команду delete. Когда это происходит как транзакция, и вы откатываете ее назад, сбрасываемое удаление также откатывается назад.

Смежные вопросы