用mysql觸發器性別範圍 十三 MySQL觸發器

2021-10-20 01:13:21 字數 3563 閱讀 3592

一、建立觸發器

觸發器是與表有關的資料庫物件,在滿足定義條件時觸發,並執行觸發器中定義的語句集合。觸發器的這種特性可以協助應用在資料庫端確保資料的完整性。

--建立只有乙個執行語句的觸發器--建立觸發器的語法:

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語句檢視觸發器...