mysql全家桶(五)觸發器

2021-09-25 00:12:57 字數 2085 閱讀 7914

觸發器(trigger):監視某種情況,並觸發某種操作,它是提供給程式設計師和資料分析員來保證資料完整性的一種方法,它是與表事件相關的特殊的儲存過程,它的執行不是由程式呼叫,也不是手工啟動,而是由事件來觸發,例如當對乙個表進行操作( insert,delete, update)時就會啟用它執行。

觸發器經常用於加強資料的完整性約束和業務規則等

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:觸發器程式體,可以是一句sql語句,或者用 begin 和 end 包含的多條語句。

mysql 除了對 insert、update、delete 基本操作進行定義外,還定義了 load data 和 replace 語句

load data 語句用於將乙個檔案裝入到乙個資料表中,相當與一系列的 insert 操作。

replace 語句一般來說和 insert 語句很像,只是在表中有 primary key 或 unique 索引時,如果插入的資料和原來 primary key 或 unique 索引一致時,會先刪除原來的資料,然後增加一條新資料,也就是說,一條 replace 語句有時候等價於一條insert 語句,有時候等價於一條 delete 語句加上一條 insert 語句。

所以這兩個語句會觸發insert 型觸發器

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

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

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

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

另外,old 是唯讀的,而 new 則可以在觸發器中使用 set 賦值,這樣不會再次觸發觸發器,造成迴圈呼叫(如插入一條資料,在其編碼前加上今天得日期『yyyymmdd』)。

#定義(在begin前)

declare variable_name [,variable_name...] datatype;

#變數賦值(在begin、end之間)

set 變數名 = 表示式值 [,variable_name = expression ...]

#例如set var_name = expr [, var_name = expr] ...

drop trigger if exists `ins_info`;  

create trigger ins_info

after insert on nhfxelect for each row

begin

if hour(new.recordtime)='20' then

insert into nhfxbyhour (unitdepname, unitdepcode, electcost, timejg, recordtime)

values( '數統學院', '1', new.userkwh, '20', new.recordtime);

end if;

end;

#檢視觸發器

show triggers [from schema_name];

#刪除(schema_name資料庫名、trigger_name觸發器名)

drop trigger [if exists] [schema_name.]trigger_name

innodb 資料庫是事務安全的,若sql語句或觸發器執行失敗,mysql 會回滾事務

觸發器(五 復合觸發器)

oracle11g開始提供了一種復合觸發器,簡單的說就是支援把語句級和行級觸發器組合在一起。實際應用場景不多,這裡就做個記錄。與單個觸發器語法有所區別 1.單個觸發器的頭部是 before after 動作 on 物件 for 觸發級別 而組合觸發器的頭部是 for 動作 on 物件 compoun...

觸發器 mysql觸發器

觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...

my sql 觸發器 mysql建立觸發器

首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...