大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 詳解MySQL觸發器

詳解MySQL觸發器

更新時間:2021-01-13 17:05:24 來源:動力節點 瀏覽1219次

在我們正式學習MySQL觸發器之前,我們先來看看什么是觸發器。觸發器是一個特殊的存儲過程,不同的是存儲過程要用CALL來調用,而觸發器不需要使用CALL ,也不需要手工啟動,只要當一個預定義的事件發生的時候,就會被MYSQL自動調用。簡單的說,觸發器是存儲SQL過程的一種特殊形式,就是一張表發生了某件事(插入、刪除、更新操作),然后自動觸發了預先編寫好的若干條SQL語句的執行。

 

在MySQL數據庫中,觸發器是由事件驅動的專用過程,由DBMS存儲和管理。觸發事件的操作和觸發器里的SQL語句是一個事務操作,具有原子性,要么全部執行,要么都不執行;MySQL觸發器能夠有效保證數據的完整性,起到了對數據約束的作用。

 

創建MySQL觸發器的語法如下:

CREATE TRIGGER trigger_name trigger_time trigger_event

ON tbl_name FOR EACH ROW trigger_stmt

觸發程序是與表有關的命名數據庫對象,當表上出現特定事件時,將激活該對象。  觸發程序與命名為tbl_name的表相關。tbl_name必須引用永久性表。不能將觸發程序與臨時表表或視圖關聯起來。  

trigger_time是觸發程序的動作時間。它可以是BEFORE或AFTER,以指明觸發程序是在激活它的語句之前或之后觸發。

 

trigger_event指明了激活觸發程序的語句的類型。trigger_event可以是下述值之一:

1.INSERT:將新行插入表時激活觸發程序,可能通過 INSERT、LOAD DATA、REPLACE 語句觸發;

2.UPDATE:更改某一行時激活觸發程序,可能通過 UPDATE 語句觸發;

3.DELETE:從表中刪除某一行時激活觸發程序,可能通過 DELETE、REPLACE 語句觸發;

請注意,trigger_event與以表操作方式激活觸發程序的SQL語句并不很類似,這點很重要。例如,關于INSERT的BEFORE觸發程序不僅能被INSERT語句激活,也能被LOAD DATA語句激活。

 

trigger_stmt是當觸發程序激活時執行的語句。如果你打算執行多個語句,可使用BEGIN ... END復合語句結構。這樣,就能使用存儲子程序中允許的相同語句。

1.創建一個單執行語句的觸發器首先創建一個account表,表中有兩個字段,分別為:acct_num字段(定義為int類型)和amount字段(定義成浮點類型);其次創建一個名為ins_sum的觸發器,觸發的條件是向數據表account插入數據之前, 對新插入的amount字段值進行求和計算:

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

create trigger ins_sum before insert on account

for each row set @sum=@sum+new.amount;

set @sum = 0;

insert into account values(1,1.00),(2,2.00);

select @sum;

 

2.創建有多個執行語句的觸發器,語法如下:

CREATE TRIGGER testref BEFORE INSERT ON test1

  FOR EACH ROW BEGIN

    INSERT INTO test2 SET a2 = NEW.a1;

    DELETE FROM test3 WHERE a3 = NEW.a1;  

    UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;

  END

示例如下:

use study;

create table test1(a1 int);

create table test2(a2 int);

create table test3(a3 int not null auto_increment primary key);

create table test4(

a4 int not null auto_increment primary key,

b4 int default 0);

 

delimiter //

 

create trigger testref before insert on test1

for each row begin

insert into test2 set a2=new.a1;

    delete from test3 where a3=new.a1;

    update test4 set b4=b4+1 where a4=new.a1;

    end

//

 

delimiter;

 

insert into test3(a3) values

(null),(null),(null),(null),(null),

(null),(null),(null),(null),(null);

 

insert into test4(a4) values

(0),(0),(0),(0),(0),(0),(0),(0),(0),(0);

 

insert into test1(a1) values

(1),(3),(1),(7),(1),(8),(4),(4);

 

select * from test1;

select * from test2;

select * from test3;

select * from test4;

 

執行結果顯示,在向表test1插入記錄的時候,test2、test3、test4都發生了變化。從這個例子看insert觸發了觸發器,向表test2中插入test1的值,刪除了test3中相同的內容,同時更新了test4中b4,即與插入的值相同的個數。

 

以上就是MySQL觸發器的相關介紹,觸發器可通過數據庫中的相關表實現級聯更改,不過,通過級聯引用完整性約束可以更有效地執行這些更改。盡管MySQL觸發器功能強大,但由于我們的濫用會造成數據庫及應用程序的維護困難,因此我們在MySQL數據庫中還是要慎重使用。想要學習更多的MySQL數據庫的相關知識,就來觀看本站的MySQL教程,體驗全新的學習之旅。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 91国视频在线 | 国产一级特黄aa级特黄裸毛片 | 奇米影音第四色 | 国产伦精品一区二区三区网站 | 免费精品精品国产欧美在线 | 亚洲国产最新 | 久久免费视屏 | 亚洲香蕉久久一区二区三区四区 | 波多结衣一区二区三区 | 亚洲国产男人本色在线观看的a站 | 看毛片免费 | 亚洲狠狠婷婷综合久久久久网站 | 亚洲欧美精品 | 天天天天色| 99热网| 九操网 | 99久久精品费精品国产一区二 | 在线亚洲国产精品区 | 国产720刺激i在线视频 | 天天玩天天干 | 久久毛片免费看 | 99热这里只有免费国产精品 | 欧美乱一级在线观看 | 日韩特级毛片免费观看视频 | 国产美女久久久亚洲 | 欧美日韩精品一区二区在线线 | 99国产热 | 欧美另类久久久精品 | 可以免费观看欧美一级毛片 | 久久新| 深夜男人影院 | 国产天天射 | 久久国内精品自在自线观看 | 视频大全在线观看免费 | 国内精品久久久久久影院老狼 | 久久精品是免费100 久久精品首页 | 久久精品青草社区 | 手机免费看一级片 | 香蕉人人超人人超免费看视频 | 你懂的国产精品 | 夜夜春夜夜爽久久 |