MySQL之觸發器的使用

2021-10-10 21:25:53 字數 2766 閱讀 4774

觸發器是與表有關的資料庫物件,指在 insert/update/delete 之前或之後,觸發並執行觸發器中定義的sql語句集 合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性 , 日誌記錄 , 資料校驗等操作 。

使用別名 old 和 new 來引用觸發器中發生變化的記錄內容,這與其他的資料庫是相似的。現在觸發器還只支援 行級觸發,不支援語句級觸發。

觸發器型別

new 和 old的使用

insert 型觸發器

new 表示將要或者已經新增的資料

update 型觸發器

old 表示修改之前的資料 , new 表示將要或已經修改後的資料

delete 型觸發器

old 表示將要或者已經刪除的資料

語法結構:

create trigger trigger_name

before/after insert/update/delete

on tb1_name

[for each row] -- 行級觸發器(mysql只支援行級觸發器)

begin

trigger_stmt ;

end$

初始化指令碼:

create table emp_logs(

id int(11) not null auto_increment,

operation varchar(20) not null comment '操作型別, insert/update/delete', operate_time datetime not null comment '操作時間',

operate_id int(11) not null comment '操作表的id',

operate_params varchar(500) comment '操作引數',

primary key(`id`)

)engine=innodb default charset=utf8;

需求:

-- 通過觸發器記錄emp表的資料變更日誌,包含增加、修改、刪除;
-- new表示新增的資料

create trigger emp_insert_trigger

after insert

on emp

for each row

begin

insert into emp_logs(id,opration,operate_time,operate_id,operate_params)values(null,'insert',now(),new.id,concat('插入後(id:',new.id,',name:',new.name,',age:',new.age,',salary:',new.salary,')'));

end$

-- old表示修改前的值,new表示修改後的值

create trigger emp_logs_update_trigger

after update

on emp

for each row

begin

insert into emp_logs (id,operation,operate_time,operate_id,operate_params)

values(null,'update',now(),new.id,concat('修改前(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,') , 修改後(id',new.id, 'name:',new.name,', age:',new.age,', salary:',new.salary,')'));

end $

create trigger emp_logs_delete_trigger

after delete

on emp

for each row

begin

insert into emp_logs (id,operation,operate_time,operate_id,operate_params)

values(null,'delete',now(),old.id,concat('刪除前(id:',old.id,', name:',old.name,', age:',old.age,', salary:',old.salary,')'));

end $

測試:

insert into emp(id,name,age,salary) values(null, '光明左使',30,3500); insert into emp(id,name,age,salary) values(null, '光明右使',33,3200);

update emp set age = 39 where id = 3;

delete from emp where id = 5;

語法結構:

drop trigger [schema_name.]trigger_name
可以通過執行 show triggers 命令檢視觸發器的狀態、語法等資訊。

語法結構:

show triggers\g;

mysql之mysql安裝、索引使用及檢視

mysql之觸發器的使用

mysql之儲存過程及函式的使用

mysql之儲存引擎及sql優化

mysql之觸發器詳解 MySQL之觸發器詳解

觸發器 trigger 監事某種情況,並出發某種操作。觸發器建立語法四要素 1 監視地點 table 2 監視事件 insert update delete 3 觸發時間 after before 4 觸發事件 insert update delete create trigger triggern...

積分觸發器 mysql 觸發器的使用

將多個資料庫中的某列資料同步時需要用到mysql觸發器,以下可做參考,已簡單測試ok.修改紅棗的積分時觸發 drop trigger if exists u hongzaocount delimiter create trigger u hongzaocount after update on ho...

mysql 觸發器 觸發器使用

1 了解什麼是觸發器?mysql 的觸發器和儲存過程一樣,都是嵌入到mysql的一段程式,觸發器 是由事件觸發某個動作,這些事件包括,插入 更新 刪除等語句。如果定義了觸發程式,觸發器就會觸發執行相應的操作。觸發器 trigger 是個特殊的儲存過程,不同的是,執行儲存過程要使用call語句來呼叫,...