<!-- END doctoc generated TOC please keep comment here to allow auto update -->php
須要在某個表發生更改時自動處理。html
例如:數據庫
觸發器是MySQL響應如下任意語句而 自動執行的一條MySQL語句(或位於BEGIN和END語句之間的一組語 句): DELETE; INSERT; UPDATE。安全
show triggers
DROP TRIGGER [trigger_name]
觸發器不能更新或覆蓋。爲了修改一個觸發器,必須先刪除它,而後再從新建立。函數
在建立觸發器時,須要給出4條信息: 惟一的觸發器名; 觸發器關聯的表; 觸發器應該響應的活動(DELETE、INSERT或UPDATE); 觸發器什麼時候執行(處理以前或以後)。工具
經過出發條件和響應活動組合每張表最多能夠建立6個觸發器 編碼
CREATE TRIGGER [trigger_name] [trigger_time] [trigger_event] ON [tb_name] FOR EACH ROW [trigger_stmt]
trigger_name:觸發器的名稱 tirgger_time:觸發時機,爲BEFORE或者AFTER trigger_event:觸發事件,爲INSERT、DELETE或者UPDATE tb_name:表示創建觸發器的代表,就是在哪張表上創建觸發器 trigger_stmt:觸發器的程序體,能夠是一條SQL語句或者是用BEGIN和END包含的多條語句spa
CREATE TRIGGER 觸發器名 BEFORE|AFTER 觸發事件 ON 表名 FOR EACH ROW BEGIN 執行語句列表 END
其中,BEGIN與END之間的執行語句列表參數表示須要執行的多個語句,不一樣語句用分號隔開3d
示例日誌
CREATE TABLE `users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL, `add_time` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `name` (`name`(250)) USING BTREE ) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1;
CREATE TABLE `logs` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `log` varchar(255) DEFAULT NULL COMMENT '日誌說明', PRIMARY KEY (`Id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日誌表';
CREATE TRIGGER user_log AFTER INSERT ON users FOR EACH ROW BEGIN DECLARE s1 VARCHAR(40)character set utf8; DECLARE s2 VARCHAR(20) character set utf8;#後面發現中文字符編碼出現亂碼,這裏設置字符集 SET s2 = " is created"; SET s1 = CONCAT(NEW.name,s2); #函數CONCAT能夠將字符串鏈接 INSERT INTO logs(log) values(s1); END;
效果演示
參考博客:http://www.javashuo.com/article/p-evmoimxy-k.html 參考書籍:<<MySQL必知必會>>