Разница между триггерами AFTER и INSTEAD OF при выполнении DML-операций заключается в том, когда происходит их выполнение: 14
- AFTER — выполняется после выполнения действия, запускающего триггер (INSERT, DELETE или UPDATE). 14 Перед началом работы триггера должны быть выполнены все операции, и заявление должно пройти проверку ограничения. 1 Триггеры AFTER нельзя создавать для представлений, только для таблиц. 14
- INSTEAD OF — выполняется вместо действия, запускающего триггер (добавление, изменение или удаление не происходит). 3 Перед началом работы триггера не нужна проверка ограничения, поэтому процедура сработает, даже если проверка завершится с ошибкой. 1 Триггеры INSTEAD OF можно создавать как для таблиц, так и для представлений. 4
Ещё несколько отличий:
- Количество триггеров на таблицу или представление. 2 Для триггера AFTER можно создать несколько триггеров на одно действие (UPDATE, DELETE или INSERT), для INSTEAD OF — только один триггер на одно действие. 2
- Каскадные ссылки. 2 Триггеры INSTEAD OF UPDATE и DELETE нельзя определять для таблиц, на которые распространяются каскадные ограничения ссылочной целостности. 2 Для триггеров AFTER таких ограничений нет. 2
- Выполнение при нарушении ограничений. 2 Если в таблице триггеров существуют ограничения, то их проверка осуществляется между выполнением триггеров INSTEAD OF и AFTER. 2 В случае нарушения ограничений выполняется откат действий триггеров INSTEAD OF, а триггер AFTER не срабатывает. 2