Сегодня интересная статья: Триггеры в MYSQL: разбираемся с BEFORE Insert.
Что такое триггеры? Это процедуры, которые записаны в самой базе данных, и запускаются при заданных условиях. В таких процедурах можно модифицировать поля в таблицах, изменять вводимые данные, а условиями запуска могут быть различные факторы: добавления данных, изменение данных, удаление данных и т.д.
Не сложно догадаться для чего вообще можно использовать триггеры в базах данных, спектр применения очень широк: обновление суммы товаров в заказе, при изменении количества, удаление всех записей пользователя после удаления самого пользователя и т.д.
Сегодня рассмотрим триггер Before insert. Он срабатывает всякий раз, когда в определённую таблицу вставляется новая строка, вернее как раз перед тем, как она будет добавлена.
В этом триггере можно изменить входящую информацию, например, на вход пришло количество товара в корзине, и при помощи триггера можно рассчитать сумарную стоимость заказа.
Внутри этого триггера есть переменная NEW, в которой хранится вся строка, которая будет вставлена, именно её и будем модифицировать и использовать в таком виде: NEW.imya_polya=’new value’.
А вот и пример триггера BEFORE INSERT:
CREATE TRIGGER contacts_before_insert BEFORE INSERT ON contacts FOR EACH ROW BEGIN DECLARE vUser varchar(50); -- Find username of person performing INSERT into table SELECT USER() INTO vUser; -- Update create_date field to current system date SET NEW.created_date = SYSDATE(); -- Update created_by field to the username of the person performing the INSERT SET NEW.created_by = vUser; END; //
В таких триггерах можно и модицировать другие таблицы. Например, если при добавлении новой строчки нужно пересчитать сумму в других строчках, то можно для этого создать триггер:
CREATE TRIGGER products_before_insert BEFORE INSERT ON products FOR EACH ROW BEGIN UPDATE totals_table SET total=(SELECT SUM(subtotal) as t FROM products WHERE id_totals_table=NEW.id_totals_table) WHERE id_totals_table=NEW.id_totals_table END; //
Думаю, что вопросы остались, поэтому пишите их в комментарии.