Mysql中觸發器的使用

2021-09-26 02:44:41 字數 2652 閱讀 9324

一、觸發器:

在銀行訪問款業務中,每次使用者進行訪問款時,系統需要修改對應的賬戶的餘額,同時也需要自動對記錄本次操作(生成交易明細),而以上的操作是同時對兩個表進行的(對銀行資訊表執行update操作,對交易資訊表完成插入操作)。 觸發程式是與表有關的命名資料庫物件,當表上出現特定事件時,將啟用該物件。

觸發器是在表中資料發生更改時自動觸發執行的,特殊的儲存過程。也就是說觸發器只針對dml(insert、update和delete)。

二、語法:

create trigger before|after

insert|update|delete  on for each row

begin

sql語句;

endbefore

表示在觸發事件發生之前執行觸發程式。

after

表示在觸發事件發生之後執行觸發器。

for each row

表示資料更新(

insert

、update

或者delete

)操作影響的每一條記錄都會執行一次觸發程式。

mysql

僅支援行級觸發器,不支援語句級別的觸發器(例如

create table

等語句)。

old、new

關鍵字

當向表插入新記錄時,在觸發程式中可以使用

new關鍵字表示新記錄,當需要訪問新記錄的某個欄位值時,可以使用「

new.

欄位名」的方式訪問。

當從表中刪除某條舊記錄時,在觸發程式中可以使用

old關鍵字表示舊記錄,當需要訪問舊記錄的某個欄位值時,可以使用「

old.

欄位名」的方式訪問。

三、案例:

-- ----------------------------

-- table structure for `t_card`

-- ----------------------------

drop table if exists `t_card`;

create table `t_card` (

`cardid` varchar(255) not null,

`password` char(6) not null,

`balance` int(11) not null,

`open_date` date not null,

primary key (`cardid`)

) engine=innodb default charset=utf8;

-- ----------------------------

-- records of t_card

-- ----------------------------

insert into t_card values ('6221 1001', '111222', '900', '2019-08-08');

insert into t_card values ('6221 1002', '111111', '500', '2019-08-08');

insert into t_card values ('6221 2221', '565555', '200', '2019-08-08');

drop table if exists t_tran;

create table if not exists t_tran(

id int auto_increment primary key,

cardid varchar(19) not null,

type varchar(10) not null,

money int not null,

t_time date not null,

foreign key(cardid) references t_card(cardid)

);drop trigger if exists t_update;

create trigger t_update after update on t_card

for each row

begin

declare vtype varchar(10);

declare m1 int;

declare m2 int;

select old.balance into m1 from t_card where cardid=old.cardid;

select new.balance into m2 from t_card where cardid=old.cardid;

if m2>m1 then set vtype='存款';

else set vtype='取款';

end if;

insert into t_tran(cardid,type,money,t_time)values(old.cardid,vtype,abs(m2-m1),now());

end

測試**:

update t_card set balance=balance-200 where cardid='6221 1002';

select * from t_card;

select * from t_tran;

積分觸發器 mysql 觸發器的使用

將多個資料庫中的某列資料同步時需要用到mysql觸發器,以下可做參考,已簡單測試ok.修改紅棗的積分時觸發 drop trigger if exists u hongzaocount delimiter create trigger u hongzaocount after update on ho...

mysql 觸發器 觸發器使用

1 了解什麼是觸發器?mysql 的觸發器和儲存過程一樣,都是嵌入到mysql的一段程式,觸發器 是由事件觸發某個動作,這些事件包括,插入 更新 刪除等語句。如果定義了觸發程式,觸發器就會觸發執行相應的操作。觸發器 trigger 是個特殊的儲存過程,不同的是,執行儲存過程要使用call語句來呼叫,...

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...