MySQL建立觸發器

2022-05-03 15:30:21 字數 2197 閱讀 1144

先來個例項:

#建表

drop

table

ifexists

t_attendance;

create

table

t_attendance (

job_no

varchar(30) default'',

operatetime

varchar(20) default'',

index

index_operatetime(operatetime),

index

index_jobno(job_no)

) engine

=innodb default charset=

utf8

#建觸發器

delimiter $

create

trigger t_afterinsert_on_doorlog after insert

on t_doorlog for

each row

begin

declare jobno varchar(30

);

declare time1 varchar(20

);

set jobno = (select job_num from tb_park_user_base where card_num =

new.cardno);

set time1 = date_format(new.operatetime,'

%y%m%d%h%i%s');

insert

into

t_attendance (job_no, operatetime)

values

(jobno,time1);

end$

例項解析:

先建立觸發器中待儲存的表t_attendance

delimiter $   意思是告訴mysql下文執行語句以「$」結束,如果沒有這句,下面語句會出錯,mysql無法判斷哪句結束。

create trigger t_afterinsert_on_doorlog after insert on t_doorlog for each row   建立觸發器的語法 其中after同級關鍵字有before, insert同級關鍵字還有delete,update

declare jobno varchar(30)   意思是宣告觸發器sql中的區域性變數

set jobno=....  意思是給區域性變數賦值,=右邊可為查詢語句或函式方法

補充觸發器的作用:

觸發器是一種特殊的儲存過程,它在插入,刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。

資料庫觸發器有以下的作用:

1.安全性。可以基於資料庫的值使使用者具有運算元據庫的某種權利。

# 可以基於時間限制使用者的操作,例如不允許下班後和節假日修改資料庫資料。

# 可以基於資料庫中的資料限制使用者的操作,例如不允許**的**的公升幅一次超過10%。

2.審計。可以跟蹤使用者對資料庫的操作。   

# 審計使用者運算元據庫的語句。

# 把使用者對資料庫的更新寫入審計表。

3.實現複雜的資料完整性規則

# 實現非標準的資料完整性檢查和約束。觸發器可產生比規則更為複雜的限制。與規則不同,觸發器可以引用列或資料庫物件。例如,觸發器可回退任何企圖吃進超過自己保證金的**。

# 提供可變的預設值。

4.實現複雜的非標準的資料庫相關完整性規則。觸發器可以對資料庫中相關的表進行連環更新。例如,在auths表author_code列上的刪除觸發器可導致相應刪除在其它表中的與之匹配的行。

# 在修改或刪除時級聯修改或刪除其它表中的與之匹配的行。

# 在修改或刪除時把其它表中的與之匹配的行設成null值。

# 在修改或刪除時把其它表中的與之匹配的行級聯設成預設值。

# 觸發器能夠拒絕或回退那些破壞相關完整性的變化,取消試圖進行資料更新的事務。當插入乙個與其主健不匹配的外部鍵時,這種觸發器會起作用。例如,可以在books.author_code 列上生成乙個插入觸發器,如果新值與auths.author_code列中的某值不匹配時,插入被回退。

5.同步實時地複製表中的資料。

6.自動計算資料值,如果資料的值達到了一定的要求,則進行特定的處理。例如,如果公司的帳號上的資金低於5萬元則立即給財務人員傳送警告資料。

my sql 觸發器 mysql建立觸發器

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

mysql建立觸發器

注 觸發器中不能呼叫儲存過程,觸發器功能應盡量簡單 use d database name 切換到資料庫 set names utf8 drop if exists when update can use drop trigger if exists tr update bind sno delim...

mysql建立觸發器

很多時候為了提高查詢效率,我們會在一些表當中增加冗餘字段,例如在客戶表裡面儲存用油卡號,但是如果客戶掛失原卡,申請了新的油卡,冗餘欄位就不正確了,這時候應該怎麼辦呢?我們可以建立乙個觸發器,當客戶插入新的油卡資料的時候同時更新客戶資料。delimiter create trigger update ...