mysql 觸發器的詳細用法

2021-09-02 18:45:05 字數 2276 閱讀 3079

觸發器:

一類特殊的資料庫程式,可以監視某種資料的操作(insert/update/delete),並觸發相關的操作(insert/update/delete),保護資料的完整性

應用場景:資料同步

例如:當乙個使用者完整資訊儲存在a/b/c三張表中,傳統方法維護使用者資訊需要將對應的資訊使用條sql語句,依次插入,但是使用觸發器的方式的話,我們可以只用插入a表中一條資料,就會自動觸發資料插入b/c表的操作,這樣就可以通過乙個表的操作,同步其他操作,實現自動化維護資料的目的。

觸發器語法格式:

creat trigger 觸發器名稱

after/before(觸發器工作的時機)

update/delete/insert(觸發器監聽事件)

on 表名(觸發器監聽的目標表)

for each row(行級監視,mysql固定寫法,oracle不同)

begin

sql語句集........(觸發器執行動作,分號結尾)

end;

刪除觸發器:drop trigger if exist 觸發器名稱

查詢資料庫觸發器:show triggers;

行變數:當目標表發生改變時候,變化的行可用行變數表示

new:代表目標表目標行發生改變之後的行

old:代表目標表目標行發生改變之前的行

觸發器案例:商品表/訂單表(商品數量控制)

觸發器監聽:insert

create trigger tr1

after insert on orders

for each row

begin

update goods set godnum = godnum-new.godnum where id = new.id;

end;

分析:orders表新增新的記錄之後,goods表對應的商品數量同步減少對應的商品訂單出數量

觸發器監聽:delete

create trigger tr2

after delete on orders

for each row

begin

update goods set godnum= godnum+old.godnum

where id = old.id;

end分析:客戶刪除訂單,恢復商品表對應商品的數量

觸發器監聽:update

create trigger tr3

after update on orders

for each row

begin

update goods set godnum= godnum+(old.godnum-new.godnum)

where id = old.id;

end分析:客戶修改訂單,商品表對應商品數量同步更新

觸發器宣告變數用法:

create trigger tr4

before insert on orders

for each row

begin

declare godsum int default 0;  -- 定義觸發器變數

select godnum  into godsum from goods where godid = new.godid; -- 變數賦值

if godsum< new.godnum  then-- 觸發器控制邏輯

update goods set godnum = new.godnum where godid = new.godid;

end if;

end分析:當客戶新建訂單超過商品表的商品數量則修改商品表,保商品表商品庫存量非負

mysql觸發器特別注意:

①:for each row:必須填寫,保證mysql支援行級控制,oracle同時支援行級控制和語句級控制

②:注意:如果在before或after觸發程式的執行過程中出現錯誤,將導致呼叫觸發程式的整個語句的失敗。對於事務性表,如果觸發程式失敗(以及由此導致的整個語句的失敗),該語句所執行的所有更改將回滾。對於非事務性表,不能執行這類回滾,因而,即使語句失敗,失敗之前所作的任何更改依然有效。

觸發器 mysql觸發器

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

mysql觸發器的要素 MySQL觸發器

觸發器是一類特殊的事務,可以監視某種資料操作 insert,update,delete 並觸發相關操作 insert,update,delete 觸發器建立之四要素 監視地點 table 監視事件 insert,update,delete 觸發時間 after,before 觸發事件 insert,...

my sql 觸發器 mysql建立觸發器

首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...