MySQL基礎 10 觸發器(Trigger)

2021-09-29 21:38:13 字數 2425 閱讀 7561

本教程以mysql8為主版本(內容兼顧mysql5.7)。

觸發器是與表相關的資料庫物件,在滿足表資料庫定義的變化條件是觸發執行

建立觸發器的語法為:

create

[definer = user]

trigger trigger_name

trigger_time trigger_event

on tbl_name for each row

[trigger_order]

trigger_body

trigger_time:

trigger_event:

trigger_order: ot

trigger_time是觸發動作時間。可以是beforeafter表示觸發器在要修改資料之前或之後執行本觸發器內容。(注意,觸發器不能建立在臨時表上)。

trigger_event指示啟用觸發器的操作型別:

在觸發器定義的body內,可以使用別名old和new,來指示資料發生變化前後的記錄內容。例如資料發生變化前後的某列。old.col_name 和new.col_name

先建立乙個用於儲存日誌的表:

mysql> create table change_log(change_time timestamp, message varchar(512));

query ok, 0 rows affected (0.01 sec)

建立觸發器

mysql> delimiter $$

mysql> create trigger tgr_ins_employee

after insert on employee for each row

begin

insert into change_log values (current_timestamp(), concat('insert data:', new.name) );

end;

$$query ok, 0 rows affected (0.00 sec)

mysql> delimiter ;

對employee插入一條資料庫後,再檢視change_log表的結果,發現觸發器已經生效:

mysql> insert into employee values (2001, 'xiaoming', 2001);

query ok, 1 row affected (0.00 sec)

mysql> select * from change_log;

+---------------------+----------------------+

| change_time | message |

+---------------------+----------------------+

| 2019-11-23 23:21:22 | insert data:xiaoming |

+---------------------+----------------------+

1 row in set (0.00 sec)

insert ...on duplicate key update...   該語法的用途是為了解決重複性,當資料庫中存在某個記錄時,執行這條語句會更新update它,而不存在這條記錄時,會插入insert。 

判斷重複的標準是:如果插入的記錄導致乙個unique索引或者primary key(主鍵)出現重複,則認為重複。

其語法是(後面update的字段只涉及需要修改的字段,不用該表中所有欄位都出現):

insert into tablename(field1,field2, field3, ...) values(value1, value2, value3, ...) on duplicate key update field1=value1,field8=value8,  ...;
對於這種insert場景,該錶上觸發器的出發順序說明如下:

如果屬於非重複的記錄(既實際是insert動作):順序為:before insert  → after insert

如果屬於重複的記錄(既實際是update動作):順序為:

before insert

→ before update→ after update。既雖然實際執行的是update,也會觸發before insert。

mysql 觸發器基礎

mysql的觸發器 一般用在需要有資料統計的時候,如果每次請求都要對一張表的資料進行統計,可以考慮觸發器,如 乙個公司的 雇員資訊表中,有使用者名稱 和 使用者的工資字段,現在需要在前端頁面上展示,總的雇員數,和總的工資數,如果每請求一次都要去使用 mysql的聚合函式 sum 和 count 其實...

MySQL基礎 觸發器

觸發器 trigger 監視某種情況,並觸發某種操作,它的執行是由事件來觸發的,例如當對乙個表進行操作 insert,delete,update 時就會啟用它執行。觸發器經常用於加強資料的完整性約束和業務規則等。觸發器建立語法四要素 1.監視地點 table 2.監視事件 insert update...

mysql 基礎 觸發器

簡單的說,就是一張表發生了某件事 插入 刪除 更新操作 然後自動觸發了預先編寫好的若干條sql語句的執行 特點 觸發事件的操作和觸發器裡的sql語句是乙個事務操作,具有原子性,要麼全部執行,要麼都不執行 作用 保證資料的完整性,起到約束的作用 觸發器是隱藏到mysql後台執行的功能。由於觸發器是隱藏...