Порядок выполнения транзакций

Tsql теория > Порядок выполнения транзакций
26.02.2013 15:02:19



Статья:

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

Любая транзакция проходит несколько проверок и программных кодов в следующем порядке.

1. Проверка Identity Insert.

2. Ограничение допустимости пустых значений.

3. Проверка типа данных.

4. Выполнение триггера INSTEAD OF. Если такой триггер существует, то выполнение инструкции DML останавливается в этой точке. Триггеры INSTEAD OF не могут быть рекурсивными. Таким образом, если триггер, запущенный событием некоторой инструкции, снова выполняет ту же инструкцию (INSERT, UPDATE или DELETE), во второй раз его присутствие игнорируется.

5. Ограничение первичного ключа.

6. Ограничение проверки.

7. Ограничение внешнего ключа.

8. Выполнение инструкции DML и обновление журнала транзакций.

9. Выполнение триггера AFTER.

10. Подтверждение транзакции.

11. Запись в файл данных.

На основе знания порядка выполнения транзакций можно сделать несколько замечаний, касающихся проектирования триггеров.

¦ Триггер AFTER выполняется после всех ограничений. По этой причине он не может скорректировать данные, поэтому данные должны пройти все проверки ограничениями, включая ограничение внешнего ключа.

¦ Триггер INSTEAD OF может помочь обойти проблемы, связанные с внешним ключом, но не с допустимостью пустых значений, типом данных или столбцом идентичности.

¦ Триггер AFTER может принимать во внимание, что данные уже прошли все встроенные проверки целостности данных.

¦ Триггер AFTER выполняется перед подтверждением транзакции. Таким образом, если данные недопустимы, он имеет возможность откатить транзакцию.

В некоторых приложениях уведомления о событиях могут стать более приемка заметку лемым методом обработки событий изменения данных.