創(chuàng)建觸發(fā)器的語法 CREATE TRIGGER trigger_name trigger_time trigger_event ON tb_name FOR EACH ROW trigger_stmt trigger_name:觸發(fā)器名稱 tirgger_time:觸發(fā)執(zhí)行事件 BEFORE:事件之前觸發(fā) AFTER:事件之后觸發(fā) trigger_event:觸發(fā)事件 INSERT:插入某一行時激活觸發(fā)器,INSERT,LOAD DATA,REPLACE語句可以觸發(fā) UPDATE:更改某一行時激活觸發(fā)器,UPDATE語句可以觸發(fā) DELETE:刪除某一行時激活觸發(fā)器,DELETE,REPLACE語句可以觸發(fā) tb_name:觸發(fā)器要執(zhí)行的哪張表 FOR EACH ROW:觸發(fā)頻率為每一行觸發(fā)一次 trigger_stmt:觸發(fā)器的程序體,可以是一條SQL語句或者是用BEGIN和END包含的多條語句 1、創(chuàng)建只有一個執(zhí)行語句的觸發(fā)器 CREATE TRIGGER 觸發(fā)器名 BEFORE|AFTER 觸發(fā)事件 ON 表名 FOR EACH ROW 執(zhí)行語句; 2、創(chuàng)建有多個執(zhí)行語句的觸發(fā)器 CREATE TRIGGER 觸發(fā)器名 BEFORE|AFTER 觸發(fā)事件 ON 表名 FOR EACH ROW BEGIN 執(zhí)行語句列表 END; MySQL默認(rèn)是以 ;作為結(jié)束執(zhí)行符號,與觸發(fā)器執(zhí)行語句列表中需要的分行起沖突,為解決此問題可用DELIMITER,如DELIMITER || ,就是將結(jié)束符號變成||。
DELIMITER || CREATE TRIGGER 觸發(fā)器名 BEFORE|AFTER 觸發(fā)事件 ON 表名 FOR EACH ROW BEGIN 執(zhí)行語句列表 END || DELIMITER; 3、NEW和OLD MySQL中定義了NEW和OLD,用來記錄發(fā)生變化的內(nèi)容,具體為: INSERT:NEW用來表示將要(BEFORE)或已經(jīng)(AFTER)插入的新數(shù)據(jù); UPDATE:OLD用來表示將要或已經(jīng)被修改的原數(shù)據(jù),NEW用來表示將要或已經(jīng)修改為的新數(shù)據(jù); DELETE:OLD用來表示將要或已經(jīng)被刪除的原數(shù)據(jù); 使用方法: NEW.columnName (columnName 為相應(yīng)數(shù)據(jù)表某一列名)
delimiter // create trigger user_log after insert on users for each row begin insert into logs(log) values(new.name); end // delimiter ; 使用觸發(fā)器 觸發(fā)器無法由用戶直接調(diào)用,而知由于對表的【增/刪/改】操作被動引發(fā)的。
insert into users(name) values('admin'); 查看觸發(fā)器 SHOW TRIGGERS語句查看觸發(fā)器信息