Автоматическое обновление данных с помощью триггеров AFTER INSERT в MySQL

Автоматическое обновление данных с помощью триггеров AFTER INSERT в MySQL

Здравствуйте. В сегодняшней статье мы рассмотрим как обновлять данные в таблице при помощи триггеров.

Триггеры (triggers) в базах данных (БД) представляют собой специальные программы, которые автоматически выполняются при определенных событиях в таблицах БД. Эти события могут быть связаны с изменением данных в таблице, удалением или добавлением записей. Один из наиболее распространенных типов триггеров — триггеры после вставки. Они выполняются после того, как новая запись была добавлена в таблицу. Триггеры после вставки могут выполнять различные задачи, такие как вставка данных в другую таблицу, обновление данных в текущей таблице или выполнение других операций, зависящих от содержимого новой записи. Рассмотрим пример использования триггеров после вставки. Предположим, что у нас есть две таблицы в нашей БД: orders (заказы) и customers (клиенты). Когда новый заказ добавляется в таблицу orders, нам нужно также обновить данные о клиенте в таблице customers. Для этого мы можем создать триггер после вставки в таблицу orders, который будет автоматически обновлять данные в таблице customers при каждой новой записи в таблице orders.

Создание таблиц


CREATE TABLE Customers (
  customer_id INT PRIMARY KEY,
  first_name VARCHAR(50),
  last_name VARCHAR(50),
  email VARCHAR(100),
  phone VARCHAR(20),
  address VARCHAR(200)
);

CREATE TABLE Orders (
  order_id INT PRIMARY KEY,
  customer_id INT,
  order_date DATETIME,
  order_total DECIMAL(10,2),
  order_status VARCHAR(20),
  FOREIGN KEY (customer_id) REFERENCES Customers(customer_id)
);

Вставка данных


INSERT INTO Customers (customer_id, first_name, last_name, email, phone, address)
VALUES 
  (1, 'Иван', 'Иванов', '[email protected]', '555-1234', 'ул. Пушкина, д.10, кв.5'),
  (2, 'Петр', 'Петров', '[email protected]', '555-5678', 'ул. Лермонтова, д.20, кв.30'),
  (3, 'Анна', 'Сидорова', '[email protected]', '555-9012', 'ул. Толстого, д.15, кв.25');

INSERT INTO Orders (order_id, customer_id, order_date, order_total, order_status)
VALUES
  (1, 1, '2022-05-10 14:30:00', 100.00, 'в обработке'),
  (2, 1, '2022-05-11 09:45:00', 50.00, 'в обработке'),
  (3, 2, '2022-05-10 11:15:00', 75.00, 'отправлен'),
  (4, 3, '2022-05-09 17:00:00', 200.00, 'доставлен');

Создание триггера


CREATE TRIGGER update_customer_info 
AFTER INSERT ON orders 
FOR EACH ROW 
BEGIN 
  UPDATE Сustomers 
  SET last_order_date = NEW.order_date 
  WHERE customer_id = NEW.customer_id;
END;

Таким образом, дата в таблице Customers должна обновиться при вставке данных в таблицу orders.

Источник

Shopping Cart