程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL中觸發器入門簡略實例與引見

MySQL中觸發器入門簡略實例與引見

編輯:MySQL綜合教程

MySQL中觸發器入門簡略實例與引見。本站提示廣大學習愛好者:(MySQL中觸發器入門簡略實例與引見)文章只能為提供參考,不一定能成為您想要的結果。以下是MySQL中觸發器入門簡略實例與引見正文


創立觸發器。創立觸發器語法以下:

CREATE TRIGGER trigger_name trigger_time trigger_event

ON tbl_name FOR EACH ROW trigger_stmt

個中trigger_name標識觸發器稱號,用戶自行指定;

trigger_time標識觸發機會,用before和after調換;

trigger_event標識觸發事宜,用insert,update和delete調換;

tbl_name標識樹立觸發器的表名,即在哪張表上樹立觸發器;

trigger_stmt是觸發器法式體;觸發器法式可使用begin和end作為開端和停止,中央包括多條語句;


~~解釋~~

CREATE TRIGGER <觸發器稱號>  --觸發器必需著名字,最多64個字符,能夠前面會附有分隔符.它和MySQL中其他對象的定名方法根本相象.      { BEFORE | AFTER }  --觸發器有履行的時光設置:可以設置為事宜產生前或後。      { INSERT | UPDATE | DELETE }  --異樣也能設定觸發的事宜:它們可以在履行insert、update或delete的進程中觸發。      ON <表稱號>  --觸發器是屬於某一個表的:當在這個表上履行拔出、 更新或刪除操作的時刻就招致觸發器的激活. 我們不克不及給統一張表的統一個事宜支配兩個觸發器。      FOR EACH ROW  --觸發器的履行距離:FOR EACH ROW子句告訴觸發器 每隔一行履行一次舉措,而不是對全部表履行一次。      <觸發器SQL語句>  --觸發器包括所要觸發的SQL語句:這裡的語句可所以任何正當的語句, 包含復合語句,然則這裡的語句受的限制和函數的一樣。    --你必需具有相當年夜的權限能力創立觸發器(CREATE TRIGGER),假如你曾經是Root用戶,那末就足夠了。這跟SQL的尺度有所分歧。

~~實例~~

example1:

創立表tab1

DROP TABLE IF EXISTS tab1;
CREATE TABLE tab1(
    tab1_id varchar(11)
);

創立表tab2

 DROP TABLE IF EXISTS tab2;

 CREATE TABLE tab2(

    tab2_id varchar(11)

 );

創立觸發器: t_afterinsert_on_tab1   

感化:增長tab1表記載後主動將記載增長到tab2表中

DROP TRIGGER IF EXISTS t_afterinsert_on_tab1;

 CREATE TRIGGER t_afterinsert_on_tab1

 AFTER INSERT ON tab1

 FOR EACH ROW

BEGIN

    insert into tab2(tab2_id) values(new.tab1_id);

 END;

測試一下

 INSERT INTO tab1(tab1_id) values('0001');

看看成果

 SELECT * FROM tab1;

 SELECT * FROM tab2;

example2:

創立觸發器: t_afterdelete_on_tab1   

感化:刪除tab1表記載後主動將tab2表中對應的記載刪去

DROP TRIGGER IF EXISTS t_afterdelete_on_tab1;

 CREATE TRIGGER t_afterdelete_on_tab1

 AFTER DELETE ON tab1

 FOR EACH ROW

 BEGIN

      delete from tab2 where tab2_id=old.tab1_id;

END;

測試一下

DELETE FROM tab1 WHERE tab1_id='0001';

看看成果

SELECT * FROM tab1;

SELECT * FROM tab2;


Mysql觸發器的履行次序

先拋出觸發器相干的幾個成績

3.1   假如before類型的觸發器法式履行掉敗,sql會履行勝利嗎?

試驗以下:

1)在FC_Word.planinfo中樹立before觸發器:

DELIMITER |
create trigger trigger_before_planinfo_update
before update
ON FC_Word.planinfo FOR EACH ROW
BEGIN
insert into FC_Output.abc (planid) values (New.planid);
END


2)檢查:mysql> select showprob from planinfo where planid=1;

+----------+
| showprob |
+----------+
|        2 |
+----------+

3)履行sql:

update planinfo set showprob=200 where planid=1;      觸發觸發器法式;

4)因為不存在FC_Output.abc,before觸發器履行掉敗,提醒:

ERROR 1146 (42S02): Table 'FC_Output.abc' doesn't exist

5)再次檢查:

mysql> select showprob from planinfo where planid=1;
+----------+
| showprob |
+----------+
|        2 |
+----------+

即修正sql未履行勝利。即假如before觸發器履行掉敗,sql也會履行掉敗。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved