达梦数据库针对表中update_time字段自动更新,建立触发器方法

假设有一张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 过程语句块。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值