Поддержка триггеров появилась в MySQL 5.0.2. Триггер — это аналог процедуры, который ассоциируется с конкретной таблицей и запускается при наступлении определенных событий связанных с этой самой таблицей. Событий для таблиц всего несколько: INSERT, DELETE, UPDATE.
Пример триггера INSERT для таблицы News — записываем в поле `created_at` дату и время создания записи. Конечно можно было воспользоваться TIMESTAMP, но в данном случае это сделано в качестве простого примера:
DROP TRIGGER IF EXISTS `database`.`news_insert`; DELIMITER $$ CREATE DEFINER = CURRENT_USER TRIGGER `database`.`news_insert` BEFORE INSERT ON `database`.`news` FOR EACH ROW BEGIN SET NEW.`created_at` = NOW(); END$$ DELIMITER ;
В триггере используем оператор DEFINER = CURRENT_USER, его можно опустить, тогда в этом случае будут права текущего пользователя, но можно и установить другого, например:
CREATE DEFINER = `user`@'localhost' TRIGGER `database`.`news_insert` BEFORE INSERT ....
До версии MySQL 5.1.6 для создания триггеров требовались полномочия суперпользователя, что не совсем хорошо, т.к. во-первых на шаровых хостингах не предоставляют полномочия суперпользователя, а во-вторых это потенциальная брешь в системе безопасности. Без прав суперпользователя в MySQL ниже 5.1.6 получим ошибку:
ERROR 1227 (42000): Access denied; you need the SUPER privilege for this operation
Пример создание пользователя в MySQL и предоставления ему обычных прав:
#DROP USER 'user'@'localhost'; # '' CREATE USER 'user'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4; GRANT USAGE ON *.* TO 'user'@'localhost' IDENTIFIED BY PASSWORD '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4; GRANT ALL PRIVILEGES ON `database`.* TO 'user'@'localhost' WITH GRANT OPTION;
Пример создание пользователя и предоставления ему прав суперпользователя:
CREATE USER 'user'@'localhost' IDENTIFIED BY 'my_password'; GRANT USAGE ON *.* TO 'user'@'localhost'; GRANT ALL PRIVILEGES ON `database`.* TO 'user'@'localhost' WITH GRANT OPTION; GRANT SUPER ON *.* TO 'user'@'localhost';
Ссылки по теме:
• MySQL 5.1 Reference Manual :: 24.1 CREATE TRIGGER Syntax
• MySQL 5.1 Reference Manual :: 12.5.1.3 GRANT Syntax
• PDF: MySQL 5.0 Triggers
• Habrahabr: Триггеры в MySQL
Август 28th, 2010 at 11:18
Нужна помощь.
Триггер не срабатывает при импорте csv. Есть таблица с триггером. Импортирую csv-файл в эту таблицу, триггер не срабатывает. Когда вручную вставляю запись в эту таблицу, триггер срабатывает.
В чем подвох?