觸發器是與表有關的資料庫物件,指在 insert/update/delete 之前或之後,觸發並執行觸發器中定義的sql語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性 , 日誌記錄 , 資料校驗等操作 。
使用別名 old 和 new 來引用觸發器中發生變化的記錄內容,這與其他的資料庫是相似的。現在觸發器還只支援行級觸發,不支援語句級觸發。
語法結構 :
create
trigger trigger_name
before/
after
insert
/update
/delete
on tbl_name
[for each row
]-- 行級觸發器
begin
trigger_stmt ;
end;
示例需求
通過觸發器記錄 emp 表的資料變更日誌 , 包含增加, 修改 , 刪除 ;
首先建立一張日誌表 :
create
table emp_logs (
id int(11
)not
null
auto_increment
,operation varchar(20
)not
null
comment
'操作型別, insert/update/delete'
,operate_time datetime
notnull
comment
'操作時間'
,operate_id int(11
)not
null
comment
'操作表的id'
,operate_params varchar
(500
)comment
'操作引數'
,primary
key(
`id`))
engine
=innodb
default
charset
= utf8;
建立 insert 型觸發器,完成插入資料時的日誌記錄 :
delimiter $ create
trigger emp_logs_insert_trigger
after
insert
on emp
for each row
begin
insert
into emp_logs (id,operation,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 $
delimiter
;
建立 update 型觸發器,完成更新資料時的日誌記錄 :
delimiter $
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 $
delimiter
;
建立delete 行的觸發器 , 完成刪除資料時的日誌記錄 :
delimiter $ 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 $
delimiter
;
測試:
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 =
39where id =3;
delete
from emp where id =
5;
語法結構 :
drop
trigger
[schema_name.
]trigger_name
如果沒有指定 schema_name,預設為當前資料庫 。
可以通過執行 show triggers 命令檢視觸發器的狀態、語法等資訊。
語法結構 :
show triggers ;
MySQL高階 觸發器
觸發器是與表有關的資料庫物件,指在insert update delete 之前或之後,觸發並執行觸發器中定義的sql語句集合。類似js中的事件 觸發器的這種特性可以協助應用在資料庫端確保資料的完整性 日誌記錄 資料校驗等操作。使用別名 old 和 new 來引用觸發器中發生變化的記錄內容,這與其他...
mysql之觸發器詳解 MySQL之觸發器詳解
觸發器 trigger 監事某種情況,並出發某種操作。觸發器建立語法四要素 1 監視地點 table 2 監視事件 insert update delete 3 觸發時間 after before 4 觸發事件 insert update delete create trigger triggern...
4 MySql高階之觸發器
1.介紹觸發器是與表有關的資料庫物件,指在insert update delete 之前或之後,觸發並執行觸發器中定義的sql語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性 日誌記錄 資料校驗等操作 使用別名 old 和 new 來引用觸發器中發生變化的記錄內容,這與其他的資料庫是...