MySQL高階之觸發器

2021-10-23 03:37:15 字數 3723 閱讀 7178

觸發器是與表有關的資料庫物件,指在 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 來引用觸發器中發生變化的記錄內容,這與其他的資料庫是...