mysql觸發器when MySQL觸發器

2021-10-18 20:14:45 字數 2374 閱讀 3816

set quoted_identifier on

goset ansi_nulls on

goalter trigger [trg_risks] on dbo.projectrisk

for insert, update

asbegin

update projectrisk

set classification =

case

when calc>= 9 then 3

when calc <9 and calc>=4 then 2

when calc <4 then 1

endfrom (select inserted.id, inserted.possibility*inserted.severity as calc from inserted) as t1

where projectrisk.id = t1.id

endgo

set quoted_identifier off

goset ansi_nulls on

go簡單了解了下mysql中,trigger的語法。

# 建立

create trigger

on for each row

# 刪除

drop trigger

注:建立觸發器需要create trigger許可權。(heidisql中執行trigger語句會有bug)

由於mysql中的每個觸發器只能針對乙個動作,所以本次移植就需要建立兩個觸發器。對於發生變更的行,在觸發器中可以用 new 來代替。

下邊的觸發器有什麼問題嗎?

delimiter &&

create trigger trg_risks_insert

after insert on `projectrisk`

for each row

update projectrisk set classification = case

when possibility*severity>=9 then 3

when possibility*severity <9 and possibility*severity>=4 then 2

when possibility*severity <4 then 1

endwhere id = new.id;

create trigger trg_risks_update

after update on `projectrisk`

for each row

update projectrisk set classification = case

when possibility*severity>=9 then 3

when possibility*severity <9 and possibility*severity>=4 then 2

when possibility*severity <4 then 1

endwhere id = new.id;

delimiter ;

問題就是,沒有考慮到觸發器中的修改也會觸發觸發器,進入了死迴圈。做了如下修改後,終於ok了。

delimiter &&

create trigger trg_risks_insert

before insert on `projectrisk`

for each row

begin

set new.classification = case

when new.possibility*new.severity>=9 then 3

when new.possibility*new.severity <9 and new.possibility*new.severity>=4 then 2

when new.possibility*new.severity <4 then 1

end;

endcreate trigger trg_risks_update

before update on `projectrisk`

for each row

begin

set new.classification = case

when new.possibility*new.severity>=9 then 3

when new.possibility*new.severity <9 and new.possibility*new.severity>=4 then 2

when new.possibility*new.severity <4 then 1

end;

enddelimiter ;

分享到:

2011-09-09 16:54

瀏覽 5848

分類:資料庫

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