mysql 基礎 觸發器

2021-09-29 01:41:27 字數 1577 閱讀 4406

簡單的說,就是一張表發生了某件事(插入、刪除、更新操作),然後自動觸發了預先編寫好的若干條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;)一樣,檢視觸發器的語法如下:

show triggers [fromschema_name]

其中,schema_name 即 schema 的名稱,在 mysql 中 schema 和 database 是一樣的,也就是說,可以指定資料庫名,這樣就不必先「use database_name;」了。

和刪除資料庫、刪除**一樣,刪除觸發器的語法如下:

droptrigger[if exists] [schema_name.]trigger_name

我們建立的資料庫一般都是 innodb 資料庫,其上建立的表是事務性表,也就是事務安全的。這時,若sql語句或觸發器執行失敗,mysql 會回滾事務,有:

如果 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...