本文总结一下 达梦数据库(DM,Dameng Database) 的触发器类型以及使用场景。
一、DM数据库支持的触发器类型
在 DM 数据库中,触发器(Trigger)主要按以下维度分类:
1. 按触发时机分类
- BEFORE 触发器
在操作执行 之前 被触发。
用途:校验数据、修改即将插入的数据。 - AFTER 触发器
在操作执行 之后 被触发。
用途:记录日志、同步数据、统计分析。 - INSTEAD OF 触发器
主要用于 视图,替代原有的操作执行。
用途:对不可直接更新的视图执行插入/更新/删除操作。
2. 按触发操作类型分类
- INSERT 触发器:当插入数据时触发。
- UPDATE 触发器:当更新数据时触发。
- DELETE 触发器:当删除数据时触发。
组合使用:
可以在同一张表上创建 多个操作类型的触发器,例如同时有 BEFORE INSERT
和 AFTER UPDATE
。
3. 按作用对象分类
- 行级触发器(FOR EACH ROW)
每一行数据被操作时触发一次。
适合逐行校验、记录日志。 - 语句级触发器
整个 SQL 语句执行时触发一次(不管影响多少行)。
适合统计或全表处理。
二、触发器的使用场景
- 数据完整性约束
- 检查插入或更新的数据是否满足业务规则,例如年龄必须大于 0。
- 在 BEFORE 触发器中可以修改或拒绝不合法数据。
- 自动生成或修改字段
- 自动生成
create_time
、update_time
等字段值。 - 对某些列做默认计算,例如价格折扣自动计算。
- 自动生成
- 审计与日志记录
- 记录谁在什么时候对表做了什么操作。
- 使用 AFTER 触发器,将数据变更写入日志表。
- 同步或级联操作
- 当一个表的数据变化时,自动更新另一张表。
- 实现复杂的业务逻辑,如库存变动同步到总库存表。
- 视图可更新
- 对不可直接修改的视图,使用 INSTEAD OF 触发器,实现插入/更新/删除。
- 复杂业务规则控制
- 比如订单状态变化触发邮件通知或扣库存等操作。
总结:
DM 数据库的触发器灵活,可按 时机(BEFORE/AFTER/INSTEAD OF)、操作(INSERT/UPDATE/DELETE) 和 作用范围(行级/语句级) 分类。常用场景主要包括 数据校验、日志审计、字段自动生成、同步操作和视图更新。