☆1. 介紹
觸發器是與表有關的資料庫物件,指在觸發器型別insert/update/delete 之前或之後
,觸發並執行觸發器中定義的sql語句集合
。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性 , 日誌記錄 , 資料校驗等操作 。
使用別名 old 和 new 來引用觸發器中發生變化的記錄內容,
這與其他的資料庫是相似的。
現在觸發器還只支援行級觸發
,不支援語句級觸發。
new 和 old的使用
insert 型觸發器
new 表示將要或者已經新增的資料
update 型觸發器
old 表示修改之前的資料 , new 表示將要或已經修改後的資料
delete 型觸發器
old 表示將要或者已經刪除的資料
2. 建立觸發器
語法結構 :
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 型觸發器,完成插入資料時的日誌記錄 :
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$
建立 update 型觸發器,完成更新資料時的日誌記錄 :
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$
建立delete 行的觸發器 , 完成刪除資料時的日誌記錄 :
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
,'光明右使',33
,3200
)$update emp set age =
39where id =
3$delete
from emp where id =
7$
3. 刪除觸發器語法結構 :
如果沒有指定 schema_name,預設為當前資料庫 。
drop
trigger
[schema_name.
]trigger_name
4. 檢視觸發器可以通過執行 show triggers 命令檢視觸發器的狀態、語法等資訊。語法結構 :
show triggers$
show triggers\g$
MySQL高階之觸發器
觸發器是與表有關的資料庫物件,指在 insert update delete 之前或之後,觸發並執行觸發器中定義的sql語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性 日誌記錄 資料校驗等操作 使用別名 old 和 new 來引用觸發器中發生變化的記錄內容,這與其他的資料庫是相似的...
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...