一、建立觸發器
觸發器是與表有關的資料庫物件,在滿足定義條件時觸發,並執行觸發器中定義的語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性。
--建立只有乙個執行語句的觸發器--建立觸發器的語法:
create triggertrigger_name trigger_time trigger_eventon table_name for each row trigger_stmt
delimiter $$create
/*[definer = ]*/
trigger `mysql_test`.`tri_01` before/after insert/update/delete
on`mysql_test`.`student`foreach rowbeginsql語句end$$
delimiter ;
trigger_time:觸發時機, before(在檢查約束前觸發)或after(在檢查約束後觸發)
trigger_event:觸發事件 insert、update、delete、
table_name:建立觸發器的表明,即在那張表上建立觸發器
trigger_stmt:觸發器執行語句
mysql的觸發器和儲存過程一樣,都是嵌入到mysql的一段程勳,觸發器是由事假來觸發某個操作,這些事件包括insert、update、delete語句。
1.1、簡單的insert觸發器
假設存在一張學生表(student),包括學生的基本資訊,學號(sid)為主鍵。
create table`student` (
`sid`int(8) not nullauto_increment,
`sname`varchar(10) not null,primary key(`sid`)
) engine=innodb auto_increment=20200105 default charset=utf8
另外存在一張成績表(score_sheet),對應每個學生包括乙個值。其中number表示序號為主鍵,自動遞增序列。它在插入過程中預設自增。同時假設成績表中包括學生姓名和學號。
create table`score_sheet` (
`id`int(20) not null auto_increment comment '成績表id,主鍵自增',
`stu_id`int(8) not null comment '學生表id',
`stu_name`varchar(10) not null comment '學生名稱',
`english`double default null comment '英語成績',
`chinese`double default null comment '語文成績',
`match`double default null comment '數學成績',primary key(`id`)
) engine=innodb auto_increment=2 default charset=utf8
該成績表目前沒有值,先需要設計乙個觸發器,當增加新的學生時,需要在成績表中插入對應的學生資訊,至於具體math、chinese、english後面由老師打分更新即可。那麼,如何設計觸發器呢?
首先它是乙個插入insert觸發器,是建立在表student上的;
然後是after,插入後的事件;
事件內容是插入成績表,主需要插入學生的學號和姓名,number為自增,而成績目前不需要。
注意:new表示student中新插入的值。
--建立觸發器
delimiter $create triggerins_stu
afterinsert on student foreach rowbegin
insert into score_sheet (stu_id, stu_name) values( new.sid, new.sname);end$
delimiter;--給學生表插入一條記錄
insert into student (sname)values ('張三');--可以看到成績表同時插入一條記錄
select * fromstudentselect * from score_sheet
1.2、判斷值後呼叫觸發器
這裡簡單講述幾個判斷插入型別的觸發器。比如觸發器呼叫,當插入時間小時為20時,對資料進行插入:
delimiter $create triggerins_info
afterinsert on nhfxelect foreach rowbegin
if hour(new.recordtime)='20' then
insert intonhfxbyhour (unitdepname, unitdepcode, electcost, timejg, recordtime)values( '數統學院', '1', new.userkwh, '20', new.recordtime);end if;end$
delimiter;
這個觸發器中,recordtime為datetime型別,如「2016-08-28 20:10:00」,這時hour()這個值為20才能插入;否則資料不能插入。同時可以date_format(new.recordtime, 『%y-%m-%d』)判斷日期為某天或某年某月進行插入。 同時,再如更新觸發器,如果設定的值為某個範圍,才進行操作或性別為「男」或「女」才進行操作。
# 基本語法:if 判斷條件 thensql語句;end if;
1.3、update觸發器-實時更新
假設存在乙個實時插入資料的伺服器,例如學生的消費金額或用電量等。stucost:學生的用電資料,實時插入,cost為每30秒消費金額,recordtime為每分鐘插入時間,datetime型別;stucostbyhour:統計學生一小時的消費金額,hourcost為金額總數,按小時統計,timejd時間段,1~24,對應每小時,recordtime為統計時間。現在需要設計乙個實時更新觸發器,當插入消費資料時,按小時統計學生的消費金額,同理,用電量等。
drop trigger if exists`upd_info`;create triggerupd_info
afterinsert on stucost foreach rowbegin
update stucostbyhour set hourcost = hourcost +new.costwhere (timejd = hour(new.recordtime) + 1) and date_format(new.recordtime, '%y-%m-%d') = date_format(recordtime, '%y-%m-%d');end;
二、檢視觸發器
show triggers;
在triggers表中檢視觸發器資訊
在mysql中所有觸發器的定義都存在information_schema資料庫的triggers**中,可以通過select來檢視,語法:select * from information_schema.triggers where condition
三、刪除觸發器
drop trigger [scheme_name] trigger_name
scheme_name:表示資料庫名稱,是可選的。如果省略了scheme_name,將從當前資料庫中捨棄觸發程式;
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...
my sql 觸發器 mysql建立觸發器
首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...
my sql 觸發器 MySQL檢視觸發器
檢視觸發器是指檢視資料庫中已經存在的觸發器的定義 狀態和語法資訊等。mysql 中檢視觸發器的方法包括 show triggers 語句和查詢 information schema 資料庫下的 triggers 資料表等。本節將詳細介紹這兩種檢視觸發器的方法。show triggers語句檢視觸發器...