資料庫 觸發器

2021-08-08 17:34:24 字數 2298 閱讀 9710

觸發器是一種與表操作有關的資料庫物件,當觸發器所在表上出現指定事件時,將呼叫該物件,即表的操作事件觸發表上的觸發器的執行

由此,可以建立6種觸發器,即:before insert、before update、before delete、after insert、after update、after delete。

另外有乙個限制是不能同時在乙個表上建立2個相同型別的觸發器,因此在乙個表上最多建立6個觸發器

begin … end 詳解

begin

[statement_list]

end

乙個完整的觸發器例項

假設系統中有兩個表:

班級表 class(班級號 classid, 班內學生數 stucount)

學生表 student(學號 stuid, 所屬班級號 classid)

要建立觸發器來使班級表中的班內學生數隨著學生的新增自動更新

delimiter $

create

trigger tri_stuinsert after

insert

on student for

each

rowbegin

declare c int;

set c = (select stucount from class where classid=new.classid);

update class set stucount = c + 1

where classid = new.classid;

end$

delimiter ;

declare var_name[,...] type [default value]
var_name 為變數名稱,同 sql 語句一樣,變數名不區分大小寫;type 為 mysql 支援的任何資料型別;可以同時定義多個同型別的變數,用逗號隔開;變數初始值為 null,如果需要,可以使用 default 子句提供預設值,值可以被指定為乙個表示式

對變數賦值採用 set 語句,語法為:

set var_name = expr [,var_name = expr] …

new 與 old 詳解

上述示例中使用了new關鍵字,和 ms sql server 中的 inserted 和 deleted 類似,mysql 中定義了 new 和 old,用來表示

觸發器的所在表中,觸發了觸發器的那一行資料。

具體地:

在 insert 型觸發器中,new 用來表示將要(before)或已經(after)插入的新資料;

在 update 型觸發器中,old 用來表示將要或已經被修改的原資料,new 用來表示將要或已經修改為的新資料;

在 delete 型觸發器中,old 用來表示將要或已經被刪除的原資料;

使用方法: new.columnname (columnname 為相應資料表某一列名)

另外,old 是唯讀的,而 new 則可以在觸發器中使用 set 賦值,這樣不會再次觸發觸發器,造成迴圈呼叫(如每插入乙個學生前,都在其學號前加「2013」)

檢視觸發器

show triggers [from schema_name];
其中,schema_name 即 schema 的名稱,在 mysql 中 schema 和 database 是一樣的,可以指定資料庫名

刪除觸發器

drop

trigger [if

exists] [schema_name.]trigger_name

觸發器的執行順序

我們建立的資料庫一般都是 innodb 資料庫,其上建立的表是事務性表,也就是事務安全的。這時,若sql語句或觸發器執行失敗,mysql 會回滾事務

①如果 before 觸發器執行失敗,sql 無法正確執行。

②sql 執行失敗時,after 型觸發器不會觸發。

③after 型別的觸發器執行失敗,sql 會回滾。

資料庫觸發器

觸發器是一種特殊型別的儲存過程,它不同於我們前面介紹過的儲存過程。觸發器主要是通過事件進行觸發而被執行的,而儲存過程可以通過儲存過程名字而 被直接呼叫。當對某一表進行諸如update insert delete 這些操作時,sql server 就會自動執行觸發器所定義的sql 語句,從而確保對資料...

資料庫觸發器

最近做了個觸發器的例子 create trigger tru user on user for update asif update status begin update user set stopflag 1 from inserted where user.userid inserted.us...

資料庫 觸發器

觸發器的概念 是使用者定義在關係表上的一類有事件驅動的特殊過程。一旦定義,任何對錶的增刪改操作均有伺服器自動啟用相應的觸發器,在dbms核心層進行集中的完整性控制。類似於約束,但比約束更靈活。觸發器的分類 dml觸發器 dml data manipulation language 觸發器是當資料庫伺...