|
|||||||
Триггеры в MySQL, краткое введение
Время создания: 25.12.2012 11:55
Раздел: Компьютер - Программирование - SQL - MySQL, MariaDB
Запись: xintrea/mytetra_syncro/master/base/1356422150h2wv3ruqvf/text.html на raw.github.com
|
|||||||
|
|||||||
Триггер — это хранимая процедура, которая не вызывается непосредственно, а исполняется при наступлении определенного события ( вставка, удаление, обновление строки ). Поддержка триггеров в MySQL началась с версии 5.0.2 Синтаксис создания триггера: CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt* This source code was highlighted with Source Code Highlighter.
Применение: создание лога Исходные данные: — таблица, за которой мы будем следить 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 — триггер DELIMITER | CREATE TRIGGER `update_test` AFTER INSERT ON `test` FOR EACH ROW BEGIN INSERT INTO log Set msg = 'insert', row_id = NEW.id; END;* This source code was highlighted with Source Code Highlighter. Теперь добавьте запись в таблицу test. В таблице log тоже появится запись, обратите внимание на поле row_id, в нем хранится id вставленной вами строки. Расширенный лог Исходные данные: — Удаляем триггер DROP TRIGGER `update_test`; — Cоздадим еще одну таблицу, — в которой будут храниться резервные копии строк из таблицы test CREATE TABLE `testing`.`backup` ( `id` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, `row_id` INT( 11 ) UNSIGNED NOT NULL, `content` TEXT NOT NULL ) ENGINE = MYISAM — триггеры DELIMITER | CREATE TRIGGER `update_test` before update ON `test` FOR EACH ROW BEGIN INSERT INTO backup Set row_id = OLD.id, content = OLD.content; END; CREATE TRIGGER `delete_test` before delete ON `test` FOR EACH ROW BEGIN INSERT INTO backup Set row_id = OLD.id, content = OLD.content; END* This source code was highlighted with Source Code Highlighter. Теперь если мы отредактируем или удалим строку из test она скопируется в backup. UPD: для создания триггеров в версии до 5.1.6 требуются полномочия суперпользователя. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|