本文总结一下 达梦数据库(DM,Dameng Database)触发器类型以及使用场景。

一、DM数据库支持的触发器类型

在 DM 数据库中,触发器(Trigger)主要按以下维度分类:

1. 按触发时机分类

  • BEFORE 触发器
    在操作执行 之前 被触发。
    用途:校验数据、修改即将插入的数据。
  • AFTER 触发器
    在操作执行 之后 被触发。
    用途:记录日志、同步数据、统计分析。
  • INSTEAD OF 触发器
    主要用于 视图,替代原有的操作执行。
    用途:对不可直接更新的视图执行插入/更新/删除操作。

2. 按触发操作类型分类

  • INSERT 触发器:当插入数据时触发。
  • UPDATE 触发器:当更新数据时触发。
  • DELETE 触发器:当删除数据时触发。

组合使用
可以在同一张表上创建 多个操作类型的触发器,例如同时有 BEFORE INSERTAFTER UPDATE

3. 按作用对象分类

  • 行级触发器(FOR EACH ROW)
    每一行数据被操作时触发一次。
    适合逐行校验、记录日志。
  • 语句级触发器
    整个 SQL 语句执行时触发一次(不管影响多少行)。
    适合统计或全表处理。

二、触发器的使用场景

  1. 数据完整性约束
    • 检查插入或更新的数据是否满足业务规则,例如年龄必须大于 0。
    • 在 BEFORE 触发器中可以修改或拒绝不合法数据。
  2. 自动生成或修改字段
    • 自动生成 create_timeupdate_time 等字段值。
    • 对某些列做默认计算,例如价格折扣自动计算。
  3. 审计与日志记录
    • 记录谁在什么时候对表做了什么操作。
    • 使用 AFTER 触发器,将数据变更写入日志表。
  4. 同步或级联操作
    • 当一个表的数据变化时,自动更新另一张表。
    • 实现复杂的业务逻辑,如库存变动同步到总库存表。
  5. 视图可更新
    • 对不可直接修改的视图,使用 INSTEAD OF 触发器,实现插入/更新/删除。
  6. 复杂业务规则控制
    • 比如订单状态变化触发邮件通知或扣库存等操作。

总结
DM 数据库的触发器灵活,可按 时机(BEFORE/AFTER/INSTEAD OF)操作(INSERT/UPDATE/DELETE)作用范围(行级/语句级) 分类。常用场景主要包括 数据校验、日志审计、字段自动生成、同步操作和视图更新