-- ######觸發器##
-- ---------------------------------------------------------
/*
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包含的多條語句
MySQL創建以下六種觸發器: BEFORE INSERT,BEFORE DELETE,BEFORE UPDATE
AFTER INSERT,AFTER DELETE,AFTER UPDATE
NEW 代表觸發器外執行對應操作,新插入代碼中的數據! 常用於 insert into 插入新數據,new 獲取要插入的內容 OLD 代表觸發器外執行對應操作,對應的原代碼中要變更或是要刪除的數據! 常用於刪和改 (drop和update)
*/
/*
現在有兩個表【用戶表】和【日誌表】,當一個用戶被創建的時候,就需要在日誌表中插入創建的log日誌,
如果在不使用觸發器的情況下,你需要編寫程序語言邏輯才能實現,
但是如果你定義了一個觸發器,觸發器的作用就是當你在用戶表中插入一條數據的之後幫你在日誌表中插入一條日誌信息。
當然觸發器並不是只能進行插入操作,還能執行修改,刪除。
*/
-- 創建測試數據表
CREATE TABLE `cf_users` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`strname` varchar(255) CHARACTER SET utf8mb4 DEFAULT NULL,
`addtime` varchar(255) DEFAULT '2000-1-1 00:00:00',
PRIMARY KEY (`id`),
KEY `strname` (`strname`(250)) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1;
CREATE TABLE `cf_logs` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`strlog` varchar(255) DEFAULT NULL COMMENT '日誌說明',
PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='日誌表';
-- 創建觸發器,插入數據前寫日誌CREATE TRIGGER user_log AFTER INSERT ON cf_users FOR EACH ROW
BEGIN
DECLARE s1 VARCHAR(225) CHARACTER SET utf8;
DECLARE s2 VARCHAR(225) CHARACTER SET utf8;
SET s2= "插入數據前觸發寫日誌";
SET s1= CONCAT(NEW.strname,S2); #函數CONCAT可以將字符串連接
INSERT INTO cf_logs(strlog) VALUES(s1);
END
-- 查看觸發器SHOW TRIGGERS;
-- 插入數據INSERT INTO cf_users(strname,addtime) VALUES('周伯通',NOW());
-- 查看結果SELECT * FROM cf_logs;
SELECT * FROM cf_users;
-- 刪除觸發器DROP TRIGGER user_log;