Создание триггеров для автоматического обновления данных

Создание триггеров для автоматического обновления данных позволяет автоматизировать процесс синхронизации и поддержания целостности данных в базе данных. Вот несколько примеров создания триггеров для автоматического обновления данных в разных СУБД.

Примеры триггеров для автоматического обновления данных

1. SQL Server

Задача: Обновить поле LastModified в таблице Employees при каждом обновлении записи.

Пример:

CREATE TRIGGER trg_UpdateLastModified
ON Employees
AFTER UPDATE
AS
BEGIN
    -- Обновляем поле LastModified на текущую дату и время
    UPDATE Employees
    SET LastModified = GETDATE()
    FROM Employees
    INNER JOIN inserted ON Employees.EmployeeID = inserted.EmployeeID;
END;
  • AFTER UPDATE: Указывает, что триггер срабатывает после обновления записи.

  • inserted: Специальная таблица, содержащая новые значения после обновления.

2. MySQL

Задача: Обновить поле UpdatedAt в таблице Orders при каждом обновлении записи.

Пример:

CREATE TRIGGER trg_UpdateOrderTimestamp
BEFORE UPDATE
ON Orders
FOR EACH ROW
BEGIN
    -- Обновляем поле UpdatedAt на текущую дату и время
    SET NEW.UpdatedAt = NOW();
END;
  • BEFORE UPDATE: Указывает, что триггер срабатывает до выполнения обновления.

  • NEW: Специальный псевдоним для новых значений после обновления.

3. PostgreSQL

Задача: Обновить поле last_updated в таблице Products при каждом обновлении записи.

Пример:

CREATE OR REPLACE FUNCTION update_last_updated()
RETURNS TRIGGER AS $$
BEGIN
    -- Обновляем поле last_updated на текущую дату и время
    NEW.last_updated := NOW();
    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_UpdateLastUpdated
BEFORE UPDATE
ON Products
FOR EACH ROW
EXECUTE FUNCTION update_last_updated();
  • BEFORE UPDATE: Указывает, что триггер срабатывает до выполнения обновления.

  • NEW: Ссылается на новые значения записи после обновления.

4. Oracle

Задача: Обновить поле ModifiedDate в таблице Invoices при каждом обновлении записи.

Пример:

CREATE OR REPLACE TRIGGER trg_UpdateModifiedDate
BEFORE UPDATE ON Invoices
FOR EACH ROW
BEGIN
    -- Обновляем поле ModifiedDate на текущую дату и время
    :NEW.ModifiedDate := SYSDATE;
END;
  • BEFORE UPDATE: Указывает, что триггер срабатывает до выполнения обновления.

  • :NEW: Ссылается на новые значения записи после обновления.

Основные моменты

  1. Тип триггера:

    • BEFORE UPDATE: Используется, если нужно изменить данные перед выполнением операции обновления.

    • AFTER UPDATE: Используется, если нужно выполнить действия после завершения операции обновления.

  2. Таблицы inserted и deleted (SQL Server):

    • inserted: Содержит новые значения для обновленных строк.

    • deleted: Содержит старые значения до обновления.

  3. Специальные псевдонимы:

    • NEW (MySQL, PostgreSQL, Oracle): Ссылается на новые значения записи после обновления.

    • OLD (PostgreSQL, Oracle): Ссылается на старые значения до обновления.

  4. Транзакции и обработка ошибок:

    • Убедитесь, что триггеры правильно обрабатывают ошибки и не создают бесконечных циклов.

Эти примеры помогут вам создавать триггеры для автоматического обновления данных в различных СУБД. Вы можете адаптировать их под свои нужды и использовать в зависимости от ваших требований и особенностей базы данных.

Last updated