MySQL高階 觸發器

2021-10-16 17:01:09 字數 3766 閱讀 5532

觸發器是與表有關的資料庫物件,指在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時候舊資料...