一.資料庫觸發器
sql觸發器是儲存在資料庫目錄中的一組sql語句。每當與表相關聯的事件發生時,即會執行或觸發sql觸發器,例如插入,更新或刪除。sql觸發器也可以當做是一種特殊型別的儲存過程。 它是特別的,因為它不像直接像儲存過程那樣呼叫。 觸發器和儲存過程之間的主要區別在於,當對表執行資料修改事件時,也就是開啟一條事務的時候會自動呼叫觸發器,簡單的說,就是一張表發生了某件事(插入、刪除、更新操作),然後自動觸發了預先編寫好的若干條sql語句的執行
注:不能建立同乙個事務的相同觸發器,在乙個表中最多建立6個觸發器
二.為什麼要使用觸發器,它的優缺點
1.觸發器的優點
2.審計:可以跟蹤使用者對資料庫的操作
3.同步實時地複製表中的資料
4.自動計算資料值,如果資料的值達到了一定的要求,則進行特定的處理
2.觸發器的缺點
1.從客戶端應用程式呼叫和執行sql觸發器不可見,因此很難弄清資料庫層中發生的情況。也就是說,我們無法直觀的看到觸發器到底執行了什麼操作
2.sql觸發器會增加資料庫伺服器的開銷,從而影響效能
3.sql觸發器基於行觸發,mysql觸發器始終時基於表中的一條記錄觸發,而不是一組sql語句,如果需要變動整個資料集而資料集資料量又較大時,觸發器效果會非常低
4.增加程式的複雜度,有些業務邏輯在**中處理,有些業務邏輯用觸發器處理,會使後期維護變得困難
注:不要過多的使用觸發器,當我們無法使用儲存過程完成工作時,可以考慮使用下sql觸發器
3.觸發器特點及作用
特點:觸發事件的操作和觸發器裡的sql語句是乙個事務操作,具有原子性,要麼全部執行,要麼都不執行
作用:保證資料的完整性,起到約束的作用
new:當觸發插入和更新事件時可用,指向的是被操作的記錄
old: 當觸發刪除和更新事件時可用,指向的是被操作的記錄
4.觸發器的限制和注意事項
1.觸發程式不能呼叫將資料返回客戶端的儲存程式,也不能使用採用call語句的動態sql語句,但是允許儲存程式通過引數將資料返回觸發程式,也就是儲存過程或者函式通過out或者inout型別的引數將資料返回觸發器是可以的,但是不能呼叫直接返回資料的過程。
2.不能再觸發器中使用以顯示或隱式方式開始或結束事務的語句,如start trans-action,commit或rollback。
注意事項:mysql的觸發器是按照before觸發器、行操作、after觸發器的順序執行的,其中任何一步發生錯誤都不會繼續執行剩下的操作,如果對事務表進行的操作,如果出現錯誤,那麼將會被回滾,如果是對非事務表進行操作,那麼就無法回滾了,資料可能會出錯。
三.哪種場景需要用到觸發器
1.當向一張表中新增或刪除記錄時,需要在相關表中進行同步操作。比如,當乙個訂單產生時,訂單所購的商品的庫存量相應減少。
2.當表上某列資料的值與其他表中的資料有聯絡時。比如,當某客戶進行欠款消費,可以在生成訂單時通過設計觸發器判斷該客戶的累計欠款是否超出了最大限度。
3.當需要對某張表進行跟蹤時。比如,當有新訂單產生時,需要及時通知相關人員進行處理,此時可以在訂單表上設計新增觸發器加以實現
四.觸發器的使用
1.觸發器的種類(在sql server 2005中,觸發器可以分為兩大類:dml觸發器和ddl觸發器)
dml觸發器:dml觸發器是當資料庫伺服器中發生資料操作語言(data manipulation language)事件時執行的儲存過程。dml觸發器又分為兩類:after觸發器和instead of觸發器
ddl觸發器:ddl觸發器是在響應資料定義語言(data definition language)事件時執行的儲存過程。ddl觸發器一般用於執行資料庫中管理任務。如審核和規範資料庫操作、防止資料庫表結構被修改等
2.建立觸發器以及刪除和檢視的語法
語法:create trigger trigger_name
trigger_time trigger_event on tbl_name
for each row (每一行發生變化都需要呼叫觸發器)
trigger_stmt
由此可見,可以建立6種觸發器,即:before insert、before update、before delete、after insert、after update、after delete
【檢視觸發器】
show triggers
【刪除觸發器】
drop trigger 觸發器名字
統一ti表中的資料然後新增到user表中
insert into user select count(*),sum(salary) from t1;
建立乙個新增觸發器 當t1表內容新增後user表會自動修改
create trigger t1_ai
after insert on t1
for each row
update user set
user_total = user_total+1,
salary_total = salary_total+new.salary;
建立乙個刪除觸發器 當t1表刪除資料後user表會自動修改
create trigger t1_ad
after delete on t1
for each row
update user set
user_total=user_total-1,
salary_total=salary_total-old.salary;
建立乙個修改觸發器 當t1表修改資料後user表會自動修改
create trigger t1_au
after update on t1
for each row
update user set
salary_total=salary_total-old.salary+new.salary;
刪除觸發器
drop trigger 觸發器名字
查詢所有觸發器 選中具體的表在執行
show triggers
mysql 觸發器 觸發器使用
1 了解什麼是觸發器?mysql 的觸發器和儲存過程一樣,都是嵌入到mysql的一段程式,觸發器 是由事件觸發某個動作,這些事件包括,插入 更新 刪除等語句。如果定義了觸發程式,觸發器就會觸發執行相應的操作。觸發器 trigger 是個特殊的儲存過程,不同的是,執行儲存過程要使用call語句來呼叫,...
MySql觸發器使用講解
觸發器 trigger 是由事件來觸發某個操作。這些事件包括insert語句 update語句和delete語句。當資料庫系統執行這些事件時,就會啟用觸發器執行相應的操作。mysql從5.0.2版本開始支援觸發器。在本文中將講解的內容包括 觸發器的含義和作用 如何建立觸發器 如何檢視觸發器 如何刪除...
MySQL觸發器使用詳解
mysql包含對觸發器的支援。觸發器是一種與表操作有關的資料庫物件,當觸發器所在表上出現指定事件時,將呼叫該物件,即表的操作事件觸發表上的觸發器的執行。建立觸發器 在mysql中,建立觸發器語法如下 複製 如下 create trigger trigger name trigger time tri...