Простенький пример демонстрирующий работу триггеров.
Первая таблица – тестовая, триггеры будем вешать на нее.
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;
Эти три вида триггеров позволяют сделать вести полноценный лог изменений в тестовой таблице. Причем предпринимать каких-либо дополнительных действий не нужно, все будет происходить автоматически.