MySql觸發器簡單說明

-- --------------------------------------------------------
-- ######觸發器##
-- ---------------------------------------------------------
/*
	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;



發佈了34 篇原創文章 · 獲贊 70 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章