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