MySQL - 触发器
1. 简介
指在增删改之前或之后触发并执行触发器中定义的SQL语句集合
可协助应用在数据库端确保数据的完整性,日志记录,数据校验等

2. 语法
-- 创建触发器/修改触发器
CREATE TRIGGER [OR REPLACE] 触发器名
[BEFORE | AFTER] [INSERT | UPDATE | DELETE]
ON 表名
FOR EACH ROW
BEGIN
-- 触发器逻辑
END;
-- 查询触发器
SHOW TRIGGERS;
-- 删除触发器
DROP TRIGGER [IF EXISTS] 触发器名;3. 触发器案例
-- 创建学生表
CREATE TABLE STUDENT (
ID INT NOT NULL AUTO_INCREMENT COMMENT '学生ID',
NAME VARCHAR(50) NOT NULL COMMENT '学生姓名',
AGE INT COMMENT '学生年龄',
PRIMARY KEY (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学生表';
-- 创建日志表
CREATE TABLE LOG (
ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '日志主键ID',
CREATE_TIME DATETIME ( 3 ) NOT NULL DEFAULT CURRENT_TIMESTAMP ( 3 ) COMMENT '日志创建时间',
EXECUTE_CONTENT TEXT NOT NULL COMMENT '日志执行内容',
PRIMARY KEY ( ID )
) ENGINE = InnoDB DEFAULT CHARSET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '日志表';4. 插入语句触发器
-- 插入前/修改后的触发器,将学生年龄修改为20岁
CREATE TRIGGER TRG_SET_AGE_INSERT
[BEFORE | AFTER] INSERT ON STUDENT
FOR EACH ROW
BEGIN
SET NEW.AGE = 20;
END;5. 删除语句触发器
-- 删除前/删除后的触发器,将删除内容写入到日志表中
CREATE TRIGGER TRG_DELETE
[BEFORE | AFTER ]DELETE ON STUDENT
FOR EACH ROW
BEGIN
INSERT INTO LOG (
CREATE_TIME,
EXECUTE_CONTENT
) VALUES (
NOW(3),
CONCAT(OLD.ID,'|',OLD.NAME,'|',OLD.AGE)
);
END6. 修改语句触发器
-- 修改前/修改后的触发器,将姓名修改为空
CREATE TRIGGER TRG_UPDATE
[BEFORE | AFTER] UPDATE ON STUDENT FOR EACH ROW BEGIN
SET NEW.NAME = "";
END;
SHOW TRIGGERS;
评论