MySQL觸發器的使用

2021-09-24 21:06:10 字數 2813 閱讀 6139

觸發器

1.通過示例了解觸發器

示例1:

create table account (acct_num int, amount decimal(10,2));

delimiter katex parse error: expected 'eof', got '#' at position 52: …t on account #̲#建立觸發器ins_sum,o…

delimiter ;

mysql> set @sum = 0;

query ok, 0 rows affected (0.00 sec)

mysql>

mysql> insert into account values(137,14.98),(141,1937.50),(97,-100.00); ##插入三行資料,觸發器被觸發了三次

query ok, 3 rows affected (0.03 sec)

records: 3 duplicates: 0 warnings: 0

mysql>

mysql> select @sum as 『total amount inserted』; ##新插入的行中的amount列會相加

±----------------------+

| total amount inserted |

±----------------------+

| 1852.48 |

±----------------------+

補充:insert into account select * from account_bak; ##匯入多少行資料,觸發器就會被觸發多少次

2.觸發器的構成部分

(1)begin end語句體

(2)什麼條件觸發 (有insert,delete,update)

(3)什麼時候觸發(before或者after insert,delete,update)

(4)觸發頻率(針對每一行資料觸發一次)

(5)觸發器定義在表上,附著在表上

語法:create

[definer = ]

trigger trigger_name ##trigger_name是觸發器的名字

trigger_time trigger_event

on tbl_name for each row

[trigger_order]

trigger_body

trigger_time: ##觸發時間

trigger_event: ##觸發條件

trigger_order: other_trigger_name ##指定在哪個觸發器之前之

後執行,5.7版本以後才有的語法結構,可以定義多個觸發器,不侷限於原來的6個

3.對於觸發器的要求

begin end之間的語句的執行效率一定要很高,並且對於資源的消耗很小

4.觸發器中的old和new

定義乙個觸發器,

create trigger chufa before update on stu for each row

對於stu表,在更新之前叫做old;更新之後叫做new

old和new的特點:

(1)對於insert來說只有new;對於delete來說只有old,update有old和new

(2)代表的是一行

(3)出現在觸發器中

new示例:

delimiter katex parse error: expected 'eof', got '#' at position 133: …nt = 0; #̲#新插入的行中的amount列…

delimiter ;

old示例:

create table account_bak as select * from account where 1=2; ##新建表,兩個表的結構一樣

delimiter katex parse error: expected 'eof', got '#' at position 58: … on account #̲#觸發器觸發條件:更新表之前 …

delimiter ;

mysql> select * from account;

±---------±--------+

| acct_num | amount |

±---------±--------+

| 137 | 100.00 |

| 141 | 1937.50 |

| 97 | -100.00 |

±---------±--------+

3 rows in set (0.00 sec)

mysql> select * from account_bak;

empty set (0.00 sec)

mysql> update account set amount=200 where acct_num=141;

query ok, 1 row affected (0.34 sec)

rows matched: 1 changed: 1 warnings: 0

mysql> select * from account_bak;

±---------±--------+

| acct_num | amount |

±---------±--------+

| 141 | 1937.50 |

±---------±--------+

1 row in set (0.00 sec)

5.對於觸發器的要求

(1)盡量少的使用,對於時常需要增刪改的表,不要使用觸發器

(2)需要使用時,一定要謹慎,執行效率一定要非常高

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