最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL中觸發(fā)器入門簡單實例與介紹

 更新時間:2013年08月17日 12:22:06   作者:  
本文章來mysql初學者介紹在mysql怎么創(chuàng)建觸發(fā)器及觸發(fā)器在mysql執(zhí)行順序,下面我來給大家詳細介紹

創(chuàng)建觸發(fā)器。創(chuàng)建觸發(fā)器語法如下:

CREATE TRIGGER trigger_name trigger_time trigger_event

ON tbl_name FOR EACH ROW trigger_stmt

其中trigger_name標識觸發(fā)器名稱,用戶自行指定;

trigger_time標識觸發(fā)時機,用before和after替換;

trigger_event標識觸發(fā)事件,用insert,update和delete替換;

tbl_name標識建立觸發(fā)器的表名,即在哪張表上建立觸發(fā)器;

trigger_stmt是觸發(fā)器程序體;觸發(fā)器程序可以使用begin和end作為開始和結束,中間包含多條語句;


~~說明~~

CREATE TRIGGER <觸發(fā)器名稱>  --觸發(fā)器必須有名字,最多64個字符,可能后面會附有分隔符.它和MySQL中其他對象的命名方式基本相象.      { BEFORE | AFTER }  --觸發(fā)器有執(zhí)行的時間設置:可以設置為事件發(fā)生前或后。      { INSERT | UPDATE | DELETE }  --同樣也能設定觸發(fā)的事件:它們可以在執(zhí)行insert、update或delete的過程中觸發(fā)。      ON <表名稱>  --觸發(fā)器是屬于某一個表的:當在這個表上執(zhí)行插入、 更新或刪除操作的時候就導致觸發(fā)器的激活. 我們不能給同一張表的同一個事件安排兩個觸發(fā)器。      FOR EACH ROW  --觸發(fā)器的執(zhí)行間隔:FOR EACH ROW子句通知觸發(fā)器 每隔一行執(zhí)行一次動作,而不是對整個表執(zhí)行一次。      <觸發(fā)器SQL語句>  --觸發(fā)器包含所要觸發(fā)的SQL語句:這里的語句可以是任何合法的語句, 包括復合語句,但是這里的語句受的限制和函數(shù)的一樣。    --你必須擁有相當大的權限才能創(chuàng)建觸發(fā)器(CREATE TRIGGER),如果你已經(jīng)是Root用戶,那么就足夠了。這跟SQL的標準有所不同。

~~實例~~

example1:

創(chuàng)建表tab1

復制代碼 代碼如下:

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

創(chuàng)建表tab2
復制代碼 代碼如下:

 DROP TABLE IF EXISTS tab2;

 CREATE TABLE tab2(

    tab2_id varchar(11)

 );


創(chuàng)建觸發(fā)器: 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:

創(chuàng)建觸發(fā)器: 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觸發(fā)器的執(zhí)行順序

先拋出觸發(fā)器相關的幾個問題

3.1   如果before類型的觸發(fā)器程序執(zhí)行失敗,sql會執(zhí)行成功嗎?

實驗如下:

1)在FC_Word.planinfo中建立before觸發(fā)器:

復制代碼 代碼如下:

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)執(zhí)行sql:

update planinfo set showprob=200 where planid=1;      觸發(fā)觸發(fā)器程序;

4)由于不存在FC_Output.abc,before觸發(fā)器執(zhí)行失敗,提示:

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

5)再次查看:

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

即修改sql未執(zhí)行成功。即如果before觸發(fā)器執(zhí)行失敗,sql也會執(zhí)行失敗。

相關文章

  • MySQL的全局鎖和表級鎖的具體使用

    MySQL的全局鎖和表級鎖的具體使用

    在真實的企業(yè)開發(fā)環(huán)境中使用MySQL,我們應該考慮一個問題:如果保證數(shù)據(jù)并發(fā)訪問的一致性呢?這一篇我就來聊聊MySQL的鎖,感興趣的可以了解一下
    2021-08-08
  • MySQL存儲過程的優(yōu)化實例

    MySQL存儲過程的優(yōu)化實例

    在編寫MySQL存儲過程的過程中,我們會時不時地需要對某些存儲過程進行優(yōu)化,其目的是確保代碼的可讀性、正確性及運行性能。本文以作者實際工作為背景,介紹了對某一個MySQL存儲過程優(yōu)化的整個過程。
    2016-07-07
  • MySQL+Navicat安裝配置保姆級教程

    MySQL+Navicat安裝配置保姆級教程

    這篇文章主要介紹了MySQL+Navicat安裝配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • iOS開發(fā)runloop運行循環(huán)機制學習

    iOS開發(fā)runloop運行循環(huán)機制學習

    這篇文章主要為大家介紹了iOS開發(fā)runloop運行循環(huán)的機制學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • MySQL?中如何歸檔數(shù)據(jù)的實現(xiàn)方法

    MySQL?中如何歸檔數(shù)據(jù)的實現(xiàn)方法

    本文主要介紹了MySQL?中如何歸檔數(shù)據(jù)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • MySQL易學易用之MYSQL不為人知的特性

    MySQL易學易用之MYSQL不為人知的特性

    MySQL易學易用,且附帶豐富的技術文檔,這二個因素使之被廣泛應用。然而,隨著MySQL發(fā)展之迅速,即使一個MySQL老手有時也會為該軟件出其不意的功能感嘆。
    2011-01-01
  • 解析mysql修改為utf8后仍然有亂碼的問題

    解析mysql修改為utf8后仍然有亂碼的問題

    本篇文章是對mysql修改為utf8后仍然有亂碼的問題進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • mysql下完整導出導入實現(xiàn)方法

    mysql下完整導出導入實現(xiàn)方法

    對于大量數(shù)據(jù)的導入導出,是件挺麻煩的事,需要考慮很多的細節(jié),這類對于需要大量數(shù)據(jù)導入導出的朋友可以參考下。
    2010-12-12
  • MySQL遠程訪問設置終極方法

    MySQL遠程訪問設置終極方法

    這篇文章主要介紹了MySQL遠程訪問設置終極方法,本文總結了多種設置方法和技巧,是解決遠程訪問的終極解決方案,需要的朋友可以參考下
    2014-12-12
  • MySQL INSERT INTO SELECT時自增Id不連續(xù)問題及解決

    MySQL INSERT INTO SELECT時自增Id不連續(xù)問題及解決

    這篇文章主要介紹了INSERT INTO SELECT時自增Id不連續(xù)問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論

渝中区| 若羌县| 博罗县| 阿图什市| 平顶山市| 厦门市| 永登县| 融水| 介休市| 吐鲁番市| 西畴县| 巴林左旗| 于田县| 湛江市| 怀远县| 锡林浩特市| 沧州市| 东山县| 应城市| 鲁甸县| 泰来县| 建昌县| 东台市| 东阳市| 内乡县| 绥阳县| 舟曲县| 大厂| 黄浦区| 湖南省| 依安县| 昔阳县| 临夏县| 扬州市| 策勒县| 安阳县| 克山县| 玛沁县| 南平市| 剑阁县| 昌江|