先來個例項:
#建表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 ...