首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 學習筆記:觸發器 創建、查看與刪除全攻略

     編輯:MySQL 綜合教學

MySQL 學習筆記:觸發器 創建、查看與刪除全攻略

觸發器 是 MySQL 的數據庫對象之一,類似編程語言中的函數,但執行方式不同:它不由程序調用,也非手動啟動,而是由特定事件(INSERT、UPDATE、DELETE)自動觸發執行。

典型應用場景

1. 學生表含「學生姓名」與「學生總數」字段,每新增一條記錄,總數自動遞增。
2. 顧客信息表需驗證電話格式、地址縮寫是否正確,插入時自動檢查。

總之,當表數據發生變更時,需自動執行數據校驗、聯動更新等操作。MySQL 約束機制無法實現字段取值範圍限制,觸發器恰好彌補此缺口。

觸發事件

1. DELETE
2. INSERT
3. UPDATE

其他 SQL 語句不會激活觸發器。

限制規則

一個表在相同觸發時間(BEFORE/AFTER)與相同事件下,只能創建一個觸發器。創建前需檢查是否已存在同名觸發器。

一、創建觸發器

1. 單條執行語句

CREATE TRIGGER trigger_name
BEFORE|AFTER trigger_event
ON table_name
FOR EACH ROW
trigger_stmt

BEFORE / AFTER:指定觸發執行時機。
trigger_event:觸發事件(INSERT/UPDATE/DELETE)。
FOR EACH ROW:任一行滿足條件即觸發。
trigger_stmt:激活後執行的語句。

實例:記錄部門表變更日誌

CREATE TABLE t_dept( deptno INT, dname VARCHAR(20), loc VARCHAR(20) );
CREATE TABLE t_diary( diaryno INT PRIMARY KEY, tablename VARCHAR(20), diarytime DATETIME );

CREATE TRIGGER tri_diarytime
BEFORE INSERT ON t_dept
FOR EACH ROW
INSERT INTO t_diary VALUES(NULL, 't_dept', NOW());

INSERT INTO t_dept VALUES(1, 'cjgongdept', 'shanxi');
-- 驗證
SELECT * FROM t_diary;

2. 多條執行語句

需使用 DELIMITER 臨時修改語句結束符:

DELIMITER $$
CREATE TRIGGER tri_diarytime2
AFTER INSERT ON t_dept
FOR EACH ROW
BEGIN
    INSERT INTO t_diary VALUES(NULL, 't_dept', NOW());
    INSERT INTO t_diary VALUES(NULL, 't_dept', NOW());
END $$
DELIMITER ;

INSERT INTO t_dept VALUES(2, 'cjgongdept', 'shanxi');
-- 驗證
SELECT * FROM t_diary;

二、查看觸發器

SHOW TRIGGERS\G

三、刪除觸發器

DROP TRIGGER trigger_name;
SHOW TRIGGERS\G
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved