Автоматическое обновление данных с помощью триггеров 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.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.