Тригери mysql і mariadb

Тригери в MySQL (від англ. Trigger) - це спеціальна процедура, що зберігається мови SQL, яка виповнюється при настанні певної події (наприклад, вставка, оновлення, видалення запису). Вона не може викликатися вручну. Підтримка цієї процедури стала доступна в MySQL 5.0.2, а так само у всіх версіях MariaDB.

Процедура зберігається в СУБД MySQL і її виклик ніяк не залежить від використовуваної мови програмування або додатки.

Переваги використання MySQL Triggers

Крім того, що використання тригерів не залежить від програми і мови програмування, є ще ряд переваг:

  1. Скорочення мережевого трафіку
  2. Мінімізація використовуваних ресурсів
  3. Відсутність необхідності передачі проміжних результатів з додатком
  4. Забезпечення цілісності даних
  5. Тригер запускається автоматично

Всі вироблені операції вважаються транзакціями, тому в разі помилки ви легко можете відкотити ті чи інші зміни.

Синтаксис створення тригера

Синтаксис созаднія тригера досить простий:

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt

  • trigger_name - назва тригера
  • trigger_time - Час спрацьовування тригера. BEFORE - перед подією. AFTER - після події.
  • trigger_event - Подія:
    1. insert - подія збуджується операторами insert, data load, replace
    2. update - подія збуджується оператором update
    3. delete - подія збуджується операторами delete, replace. Оператори DROP TABLE і TRUNCATE не активується виконання тригера
  • tbl_name - назва таблиці
  • trigger_stmt вираз, яке виконується при активації тригера

Варто звернути увагу, що тригери можуть бути прив'язані не до таблиці, а, безпосередньо, до подання (VIEW). В такому випадку з їх допомогою реалізується механізм "оновлюваного вистави".

Приклад створення тригера

Давайте розглянемо наступний приклад. У нас є 2 таблиці test і log. Створимо тригер, який буде записувати подія в таблицю log при додаванні запису в таблицю test.

Створимо тестові таблиці:

/ * Таблиця test, за якою ми будемо стежити * /
CREATE TABLE `test` (` id` INT (11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `content` TEXT NOT NULL);

/ * Таблиця log, куди будемо записувати інформацію * /
CREATE TABLE `log` (` id` INT (11) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `msg` VARCHAR (255) NOT NULL,` time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `row_id` INT (11) NOT NULL);

/ * Створення тригера * /
DELIMITER | CREATE TRIGGER `update_test` AFTER INSERT ON` test` FOR EACH ROW BEGIN INSERT INTO log Set msg = 'insert', row_id = NEW.id; END;

Таким чином, ми створили тригер update_test, який буде спрацьовувати при додаванні запису в таблицю test. І, тепер, в таблиці log так само з'явиться така ж запис. А в рядку row_id буде зберігатися id записи.

Тут, оператор DELIMITER використовується для визначення знака початку / закінчення процедури. Він може бути будь-яким. Головне, щоб цей символ не використовувався в саме процедурі.

Щоб подивитися всі створені тригери, використовуйте команду:

А щоб видалити тригер, використовуйте команду DROP TRIGGER. У нашому прикладі, щоб видалити створений тригер:

DROP TRIGGER `update_test`;

Особливості використання тригерів

На що варто звернути увагу при використанні тригерів:

  1. Якщо ви видалите таблицю, до якої прив'язані тригери, то вони теж підуть
  2. Тригер запускається для кожного запису в таблиці. Якщо ваш запит стосується, наприклад, 5 записів, то тригер буде запущений рівно 5 разів
  3. Для створення тригера, ви повинні мати привілеї SUPER

Коли Ваш проект вже виростить до серйозних розмірів, Вам потрібно оренда сервера в Дата-Центрі. У RigWEB до кожного виділеного сервера надається безкоштовне адміністрування. Ми допоможемо Вам налаштувати тригери, якщо необхідно.

VPS / VDS за 389 р. від RigWEB.RU з адмініструванням

Схожі статті