mysql 觸發器的使用(慎用)

2021-07-24 19:01:47 字數 2205 閱讀 8972

【前言】最近有乙個需求,店鋪積分統計,每生成一條積分消費(贈送)日誌記錄,對應的店鋪增加對應的剩餘總積分和消費總積分,想了想覺得 mysql 觸發器不錯,然後嘗試寫了乙個。注意,觸發器基於諸多原因,請慎用或不用。

表1 日誌表

欄位1 id

欄位2 使用型別(1增加2消費)

欄位3 積分數

欄位4 店鋪id

欄位5 時間戳

score_log

idscore_type

score_num

shop_id

create_at

表2 店鋪積分總表

欄位1 id

欄位2 店鋪id

欄位3 店鋪剩餘可用積分

欄位4 店鋪已消費總積分

shop_score

idshop_id

left_score

use_score

的每生成一條 score_log 日誌記錄 

1)如果 shop_score 中存在shop_id 為新score_log 日誌中的shop_id  那接下來更新

如果不存在 則先插入一條 shop_id 為新score_log 日誌中的shop_id 其他值為0 的初始記錄 然後再更新

2) 更新規則

1> score_log 中 使用為消費型別 score_type = 2 

shop_score 中 left_score = left_score - score_log.score_num

use_score = use_score +  score_log.score_num

2> 

score_log 中 使用為贈送型別 score_type = 1 

shop_score 中 left_score = left_score + score_log.score_num

1)觸發器的使用

# 增加觸發器

delimiter $$

create

trigger `資料庫名`.`觸發器名` before | after insert/update/delete

on `dba`.`score_log`

for each row begin

# 這裡加入邏輯**

end$$

delimiter ;

#刪除觸發器

drop trigger `觸發器名`;

【注意】mysql 觸發器對應每張表 僅能新增乙個觸發器  且 insert 中僅能使用 new 關鍵字 update 可以使用 new|old  delete 可以使用 old 代替 表名 獲取相應的資料

delimiter $$

create

trigger `dba`.`triggera` after insert

on `dba`.`score_log`

for each row begin

if not exists(select id from shop_score where shop_score.shop_id = new.shop_id) then

insert into shop_score(shop_id) values(new.shop_id);

end if;

if new.score_type = 1 then

update shop_score set left_score = left_score + new.score_num where shop_score.shop_id = new.shop_id;

end if;

if new.score_type = 2 then

update shop_score set left_score = left_score - new.score_num where shop_score.shop_id = new.shop_id;

update shop_score set use_score = use_score + new.score_num where shop_score.shop_id = new.shop_id;

end if;

end$$

delimiter ;

# 刪除觸發器

drop trigger `triggera`;

請參看官方文件 

積分觸發器 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...