Posts Tagged ‘триггеры’

Триггеры в MySQL

Четверг, октября 6, 2011

Простенький пример демонстрирующий работу триггеров.

Первая таблица – тестовая, триггеры будем вешать на нее.

CREATE TABLE `test` (
`id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
`content` TEXT NOT NULL
) ENGINE = MYISAM

Вторая таблица – логи, в ней будет накапливаться информация о действиях производимых в первой таблице.

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
) ENGINE = MYISAM

Ну и собственно сами триггеры:

1. Триггер, реагирующий на вставку строк в первую таблицу (INSERT).

CREATE TRIGGER `insert_test` AFTER INSERT ON `test`
FOR EACH ROW BEGIN
INSERT INTO log Set msg = 'insert', row_id = NEW.id;
END;

2.  Триггер, реагирующий на изменение сток в первой таблице (UPDATE)

CREATE TRIGGER `update_test` BEFORE UPDATE ON `test`
FOR EACH ROW BEGIN
INSERT INTO log Set msg = 'update', row_id = OLD.id;
END;

3. Триггер, реагирующий на удаление строк из первой таблицы (DELETE)

CREATE TRIGGER `delete_test` BEFORE DELETE ON `test`
FOR EACH ROW BEGIN
INSERT INTO log Set msg = 'delete', row_id = OLD.id;
END;

Эти три вида триггеров позволяют сделать вести полноценный лог изменений в тестовой таблице. Причем предпринимать каких-либо дополнительных действий не нужно, все будет происходить автоматически.