觸發器是與表有關的資料庫物件,指在insert/update/delete 之前或之後,觸發並執行觸發器中定義的sql語句集合。(類似js中的事件)觸發器的這種特性可以協助應用在資料庫端確保資料的完整性 , 日誌記錄 , 資料校驗等操作。
使用別名 old 和 new 來引用觸發器中發生變化的記錄內容,這與其他的資料庫是相似的。現在觸發器還只支援行級觸發,不支援語句級觸發。
觸發器型別
new 和 old的使用
insert 型觸發器
new 表示將要或者已經新增的資料
update 型觸發器
old 表示修改之前的資料 , new 表示將要或已經修改後的資料
delete 型觸發器
old 表示將要或者已經刪除的資料
語法結構 :
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語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性 日誌記錄 資料校驗等操作 使用別名 old 和 new 來引用觸發器中發生變化的記錄內容,這與其他的資料庫是相似的...
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...
my sql 觸發器 mysql建立觸發器
首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...