觸發器(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時候舊資料...