假设有一张sys_operation_record系统日志表如下
检查是否存在 sys_operation_record表,有的话就删除表:
DROP TABLE IF EXISTS sys_operation_record ;
创建表 sys_operation_record :(以下是MYSQL兼容达梦的sql语句,可执行,仅供参考)
CREATE TABLE sys_operation_record (
id INT IDENTITY(1,1) PRIMARY KEY COMMENT '主键',
user_id INT NULL COMMENT '用户id',
module VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '操作模块',
description VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '操作功能',
url VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求地址',
request_method VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求方式',
method VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '调用方法',
params VARCHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '请求参数',
result VARCHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '返回结果',
error VARCHAR CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '异常信息',
comments VARCHAR(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '备注',
spend_time INT NULL COMMENT '消耗时间, 单位毫秒',
os VARCHAR(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '操作系统',
device VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '设备名称',
browser VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT '浏览器类型',
ip VARCHAR(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL COMMENT 'ip地址',
create_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '操作时间',
update_time TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间'
) ;
添加触发器
当sys_operation_record发生变化时, 更新update_time时间:
CREATE TRIGGER trg_update_sys_operation_record_update_time
BEFORE UPDATE ON sys_operation_record
FOR EACH ROW
BEGIN
SET NEW.update_time = CURRENT_TIMESTAMP;
END;
表触发器语法
用户可使用触发器定义语句(CREATE TRIGGER)在一张基表上创建触发器。下面是表触发器定义语句的语法。

语法格式
CREATE [OR REPLACE] TRIGGER [<模式名>.]<触发器名> [WITH ENCRYPTION]
<触发限制描述> [REFERENCING ][REFERENCING <trig_referencing_list>][FOR EACH {ROW | STATEMENT}][WHEN (<条件表达式>)]<触发器体>
<trig_referencing_list>::= <referencing_1>|<referencing_2>
<referencing_1>::=OLD [ROW] [AS] <引用变量名> [ NEW [ROW] [AS] <引用变量名>]
<referencing_2>::=NEW [ROW] [AS] <引用变量名>
<触发限制描述>::=<触发限制描述1> | <触发限制描述2>
<触发限制描述1>::= <BEFORE|AFTER> <触发事件列表> [LOCAL] ON <触发表名>
<触发限制描述2>::= INSTEAD OF <触发事件列表> [LOCAL] ON <触发视图名>
<触发表名>::=[<模式名>.]<基表名>
<触发事件>::=INSERT|DELETE|{UPDATE|{UPDATE OF<触发列清单>}}
<触发事件列表>::=<触发事件> | {<触发事件列表> OR <触发事件>}
参数
1.< 触发器名 > 指明被创建的触发器的名称;
2.BEFORE 指明触发器在执行触发语句之前激发;
3.AFTER 指明触发器在执行触发语句之后激发;
4.INSTEAD OF 指明触发器执行时替换原始操作;
5.< 触发事件 > 指明激发触发器的事件。INSTEAD OF 中不支持 {UPDATE OF < 触发列清单 >};
6.< 基表名 > 指明被创建触发器的基表的名称;
7.WITH ENCRYPTION 选项,指定是否对触发器定义进行加密;
8.REFERENCING 子句 指明相关名称可以在元组级触发器的触发器体和 WHEN 子句中利用相关名称来访问当前行的新值或旧值,缺省的相关名称为 OLD 和 NEW;
9.< 引用变量名 > 标识符,指明行的新值或旧值的相关名称;
10.FOR EACH 子句 指明触发器为元组级或语句级触发器。FOR EACH ROW 表示为元组级触发器,它受被触发命令影响、且 WHEN 子句的表达式计算为真的每条记录激发一次。FOR EACH STATEMENT 为语句级触发器,它对每个触发命令执行一次。FOR EACH 子句缺省则为语句级触发器;
11.WHEN 子句 表触发器中只允许为元组级触发器指定 WHEN 子句,它包含一个布尔表达式,当表达式的值为 TRUE 时,执行触发器;否则,跳过该触发器;
12.< 触发器体 > 触发器被触发时执行的 SQL 过程语句块。