mysql中觸發器的使用詳解

2021-08-26 04:10:54 字數 2843 閱讀 3596

-

觸發器在mysql中應用的不多,它是在mysql5以上才開始支援的,不支援不代表它不重要,首先了解一下什麼是觸發器.觸發器是在資料庫中為響應乙個特殊**中的某些事件而自動執行的程式**。(wikipedia)說得簡單一些,它是在乙個特殊的資料庫事件,如insert或delete發生時,自動啟用的一段**。觸發器可方便地用於日誌記錄、對單個**到其他鏈結式**進行自動的「層疊式」更改、或保證對**關係進行自動更新。當乙個新整數值增加到資料庫域中時,自動更新執行的總數的**段是乙個觸發器。自動記錄對乙個特殊資料庫**所作更改的sql命令塊也是乙個觸發器例項。

觸發器是mysql 5.x的新功能,隨著5.x**樹新版本的出現,這一功能也逐漸得到改善。在本文中,我將簡單介紹如何定義並使用觸發器,檢視觸發器狀態,並如何在使用完畢後刪除觸發器。我還將為你展示乙個觸發器在現實世界中的應用例項,並檢驗它對資料庫記錄的改變。

例子通過簡單(雖然是人為的)例項來說明是了解mysql觸發器應用的最佳辦法。首先我們建立兩個單域的**。乙個**中為姓名列表(**名:data),另乙個**中是所插入字元的字元數(**名:chars)。我希望在data**中定義乙個觸發器,每次在其中插入乙個新姓名時,chars**中執行的總數就會根據新插入記錄的字元數目進行自動更新。

以下為引用的內容:

mysql> create table data (name varchar(255));

query ok, 0 rows affected (0.09 sec)

mysql> create table chars (count int(10));

query ok, 0 rows affected (0.07 sec)

mysql> insert into chars (count) values (0);

query ok, 1 row affected (0.00 sec)

mysql> create trigger t1 after insert on

data for each row update chars set count = count + char_length(new.name);

query ok, 0 rows affected (0.01 sec)

理解上面**的關鍵在於create trigger命令,它被用來定義乙個新觸發器。這個命令建立乙個新觸發器,假定的名稱為t1,每次有乙個新記錄插入到data**中時,t1就被啟用。

在這個觸發器中有兩個重要的子句:

after insert子句表明觸發器在新記錄插入data**後啟用。

update chars set count = count + char_length(new.name)子句表示觸發器啟用後執行的sql命令。在本例中,該命令表明用新插入的data.name域的字元數來更新chars.count欄。這一資訊可通過內建的mysql函式char_length()獲得。

放在源**網域名稱前面的new關鍵字也值得注意。這個關鍵字表明觸發器應考慮域的new值(也就是說,剛被插入到域中的值)。mysql還支援相應的old字首,可用它來指域以前的值。

你可以通過呼叫show trigger命令來檢查觸發器是否被啟用。

以下為引用的內容:

mysql> show triggersg

*************************** 1. row ******************

?trigger: t1

?event: insert

?table: data

statement: update chars set count = count + char_length(new.name)

timing: after

?created: null

ql_mode:

1 row in set (0.01 sec)

啟用觸發器後,開始對它進行測試。試著在data**中插入幾個記錄:

以下為引用的內容:

mysql> insert into data (name) values ('sue'), ('jane');

query ok, 2 rows affected (0.00 sec)

records: 2?duplicates: 0?warnings: 0

然後檢查chars**看觸發器是否完成它該完成的任務:

以下為引用的內容:

mysql> select * from chars;

+-------+

| count |

+-------+

| 7 |

+-------+

1 row in set (0.00 sec)

以下為引用的內容:

mysql> create table audit (id int(7),

balance float, user varchar(50)

not null, time timestamp not null);

query ok, 0 rows affected (0.09 sec)

接下來,我將在accounts**中定義乙個觸發器。

以下為引用的內容:

mysql> create trigger t1 after updateon accounts

for each row insert into audit (id, balance, user, time)

values (old.id, new.balance, current_user(), now());

query ok, 0 rows affected (0.04 sec)

注釋:accounts**每經歷一次update,觸發器插入(insert)對應記錄的id、新的餘額、當前時間和登入audit**的使用者的名稱

mysql之觸發器詳解 MySQL之觸發器詳解

觸發器 trigger 監事某種情況,並出發某種操作。觸發器建立語法四要素 1 監視地點 table 2 監視事件 insert update delete 3 觸發時間 after before 4 觸發事件 insert update delete create trigger triggern...

Mysql中觸發器的使用

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

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

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