Triggerii sunt coduri care, la producerea unui eveniment, rulează codul asociat. Pot fi utile, mai ales la înregistrarea componentelor temporale, în funcţie de inserarea, actualizarea sau ştergerea unor înregistrări, realizarea unor calcule etc. Pot fi creaţi/modificaţi vizual (de ex. prin phpMyAdmin) sau prin cod.
Crearea tabelei pentru aplicarea triggerilor
Pentru a putea exemplifica nişte triggeri simpli, vom crea o tabelă cu două câmpuri de tip timestamp.
|
1 2 3 4 5 6 7 |
DROP TABLE IF EXISTS `t_test_trig`; CREATE TABLE IF NOT EXISTS `t_test_trig` ( `id` int NOT NULL PRIMARY KEY AUTO_INCREMENT , `camp` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_romanian_ci DEFAULT NULL , `data_in` timestamp NOT NULL , `data_upd` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ) DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_romanian_ci COMMENT='Demo pentru triggeri INSERT si Update'; |
Trigger la INSERT
|
1 2 3 4 5 6 |
DROP TRIGGER IF EXISTS `ins_time`; DELIMITER $$ CREATE TRIGGER `ins_time` BEFORE INSERT ON `t_test_trig` FOR EACH ROW BEGIN SET new.data_in = now(); END $$ DELIMITER ; |
Dacă se foloseşte formularul, conţinutul ar fi precum cel de jos.
După cum se vede, mai jos, la inserarea unei înregistrări a apărut data curentă.
Desigur, pentru inserarea datei curente la introducerea unei noi înregistrări, se putea alege, pentru câmpul respectiv, scriptul , `data_in` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP sau se poate modifica caracterista câmpului ulterior, astfel: ALTER TABLE `t_test_trig` ADD `data_in` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP;
Trigger la UPDATE
|
1 2 3 4 5 6 |
DROP TRIGGER IF EXISTS `upd_time`; DELIMITER $$ CREATE TRIGGER `upd_time` BEFORE UPDATE ON `t_test_trig` FOR EACH ROW BEGIN SET new.data_upd = now(); END $$ DELIMITER ; |
Dacă se foloseşte formularul, conţinutul ar fi precum cel de jos.
În cazul în care ar fi doar un câmp de tip TIMESTAMP, se poate seta, în structura câmpului, opţiunea de inserare a datei curente la modificarea conţinutului înregistrării.




