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也會履行掉敗。