簡單的說,就是一張表發生了某件事(插入、刪除、更新操作),然後自動觸發了預先編寫好的若干條sql語句的執行;
特點:觸發事件的操作和觸發器裡的sql語句是乙個事務操作,具有原子性,要麼全部執行,要麼都不執行;
作用:保證資料的完整性,起到約束的作用;
觸發器是隱藏到mysql後台執行的功能。
由於觸發器是隱藏的,所以在別人使用某個表的時候而不知道已經建立了觸發器(這個是經常發生的)的時候可能會建立乙個同類的觸發器或者是在自己的**中加入了你建立觸發器的類似邏輯,這樣就會導致最後出的資料混亂。
資料不易排查問題,後端寫**的時候由於沒有把處理的部分邏輯加到**中,最終會導致debug的時候不易排查問題。
複雜邏輯,難免會出現觸發器的,如果這個時候在加上幾個儲存過程,再加上事務等,最終可能會導致死鎖。
資料遷移時不方便(聽**的乙個dba說的,我沒有做過有觸發器的資料遷移)。會導致後端和測試花大量的時間去檢驗資料。
上述缺點太多,劣勢大於優勢。
1.監視地點(table)
2.監視事件(insert/update/delete)
3.觸發時間(after/before)
4.觸發事件(insert/update/delete)
觸發頻率:針對每一行執行
create trigger 觸發器名稱 trigger_time trigger_event注意on 表名 for each row begin
操作end
;;delimiter ;
觸發器只能建立在永久表上,不能對臨時表進行觸發。
觸發器只能對同乙個表相同觸發時間的相同觸發事件,只能定義乙個觸發器。如果兩個同類的觸發器,那麼只會觸發最後建立的觸發器。(但是不會報錯的喲)
和檢視資料庫(show databases;)檢視**(show tables;)一樣,檢視觸發器的語法如下:
其中,schema_name 即 schema 的名稱,在 mysql 中 schema 和 database 是一樣的,也就是說,可以指定資料庫名,這樣就不必先「use database_name;」了。show triggers [
from
schema_name]
和刪除資料庫、刪除**一樣,刪除觸發器的語法如下:
我們建立的資料庫一般都是 innodb 資料庫,其上建立的表是事務性表,也就是事務安全的。這時,若sql語句或觸發器執行失敗,mysql 會回滾事務,有:drop
trigger
[if exists] [schema_name.]trigger_name
如果 before 觸發器執行失敗,sql 無法正確執行。
sql 執行失敗時,after 型觸發器不會觸發。
after 型別的觸發器執行失敗,sql 會回滾
建立表 使用者表和使用者歷史表(用於測試)
mysql 觸發器基礎
mysql的觸發器 一般用在需要有資料統計的時候,如果每次請求都要對一張表的資料進行統計,可以考慮觸發器,如 乙個公司的 雇員資訊表中,有使用者名稱 和 使用者的工資字段,現在需要在前端頁面上展示,總的雇員數,和總的工資數,如果每請求一次都要去使用 mysql的聚合函式 sum 和 count 其實...
MySQL基礎 觸發器
觸發器 trigger 監視某種情況,並觸發某種操作,它的執行是由事件來觸發的,例如當對乙個表進行操作 insert,delete,update 時就會啟用它執行。觸發器經常用於加強資料的完整性約束和業務規則等。觸發器建立語法四要素 1.監視地點 table 2.監視事件 insert update...
觸發器 mysql觸發器
觸發器是一種特殊的儲存過程,它在插入 刪除或修改特定表中的資料時觸發執行,它比資料庫本身標準的功能有更精細和更複雜的資料控制能力。和儲存過程一樣,很少使用。1 觸發器的作用 2 建立觸發器 建立測試環境 mysql create database test db query ok,1 row aff...