Введение
Код базы данных, который выполняется после определенных событий в таблице.
A database trigger is procedural code that is automatically executed in response to certain events on a particular table or view in a database. The trigger is mostly used for maintaining the integrity of the information on the database. For example, when a new record (representing a new worker) is added to the employees table, new records should also be created in the tables of the taxes, vacations and salaries. Triggers can also be used to log historical data, for example to keep track of employees' previous salaries.
Триггер базы данных — это процедурный код, который автоматически выполняется в ответ на определенные события, происходящие с конкретной таблицей или представлением в базе данных. Триггеры в основном используются для обеспечения целостности данных в базе данных. Например, при добавлении новой записи (представляющей нового сотрудника) в таблицу сотрудников, необходимо также создать новые записи в таблицах налогов, отпусков и заработной платы. Триггеры также могут использоваться для ведения журнала исторических данных, например, для отслеживания предыдущей заработной платы сотрудников.
A database trigger is procedural code that is automatically executed in response to certain events on a particular table or view in a database. The trigger is mostly used for maintaining the integrity of the information on the database. For example, when a new record (representing a new worker) is added to the employees table, new records should also be created in the tables of the taxes, vacations and salaries. Triggers can also be used to log historical data, for example to keep track of employees' previous salaries.
Триггеры в СУБД
Ниже приводится ряд описаний того, как некоторые популярные СУБД поддерживают триггеры.
Оракул
В дополнение к триггерам, которые срабатывают (и выполняют код PL/SQL) при изменении данных, Oracle 10g поддерживает триггеры, которые срабатывают при изменении объектов уровня схемы (то есть таблиц), а также при событиях входа или выхода пользователя из системы.
Системовые триггеры
Начиная с Oracle 8i, события базы данных – входы в систему, выходы из системы, запуски – могут вызывать Oracle-триггеры.
Microsoft SQL Server (вводится в действие с 1 января 2013)
Список всех доступных событий срабатывания в Microsoft SQL Server для DDL-триггеров доступен на Microsoft Docs. Выполнение условных действий в триггерах (или проверка данных после изменения) осуществляется посредством доступа к временным таблицам Inserted и Deleted.
MySQL/MariaDB (включает в себя
Ограниченная поддержка триггеров в СУБД MySQL/MariaDB была добавлена в версии 5.0 MySQL, выпущенной в 2005 году. Начиная с версии 8.0, они поддерживают триггеры DDL (языка определения данных) и DML (языка манипулирования данными). Также поддерживается использование любого типа DDL триггера (AFTER или BEFORE) при их определении. Триггеры создаются с помощью конструкции CREATE TRIGGER и удаляются с помощью конструкции DROP TRIGGER. Оператор, выполняемый при наступлении события, определяется после конструкции FOR EACH ROW, за которой следует ключевое слово (SET или BEGIN), указывающее, является ли следующее выражение или блок операторов соответственно.
IBM DB2 LUW
IBM DB2 для распределенных систем, известных как DB2 для LUW (LUW означает Linux, Unix, Windows), поддерживает три типа триггеров: Before trigger, After trigger и Instead of trigger. Поддерживаются триггеры уровня оператора и уровня строки. Если для одной и той же операции на таблице определено несколько триггеров, порядок их выполнения определяется датой создания триггеров. Начиная с версии 9.7, IBM DB2 поддерживает автономные транзакции. Before trigger предназначен для проверки данных и определения, разрешать ли выполнение операции. Если из Before trigger возникает исключение, операция прерывается и данные не изменяются. В DB2 Before trigger доступны только для чтения – вы не можете изменять данные в Before trigger. After trigger предназначен для постобработки после выполнения запрошенного изменения. After trigger могут записывать данные в таблицы, и, в отличие от некоторых других баз данных, вы можете записывать в любую таблицу, включая таблицу, на которой работает триггер. Instead of trigger используются для обеспечения возможности записи в представления. Триггеры обычно программируются на языке SQL PL.