如何添加插入前触发器校验待插入字段值是否在指定数值区间
INSERT前校验n1字段范围的触发器实现
现有示例表T1结构如下:
CREATE TABLE T1( ID INT PRIMARY KEY, n1 INT );
要实现插入操作执行前自动校验n1取值介于0-10区间,直接创建BEFORE INSERT类型的触发器即可,以下为MySQL环境下的可执行代码:
-- 修改语句分隔符,避免触发器体内的分号和默认分隔符冲突 DELIMITER // CREATE TRIGGER trg_t1_validate_n1_range BEFORE INSERT ON T1 FOR EACH ROW BEGIN -- 校验待插入的n1值,超出范围直接抛错拦截 IF NEW.n1 < 0 OR NEW.n1 > 10 THEN SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '插入失败:n1字段取值必须在0到10的闭区间内'; END IF; END // -- 还原默认分隔符 DELIMITER ;
关键说明:
- 必须使用
BEFORE INSERT作为触发时机,校验逻辑会在数据实际写入表之前执行,校验不通过直接终止插入流程,不会产生脏数据,也不需要额外做回滚操作 - 触发器内用
NEW关键字指代待插入的新行,通过NEW.n1就能拿到本次插入要写入的n1值做判断 - 如果后续更新操作也需要做同样的范围校验,额外创建一个
BEFORE UPDATE类型的触发器,复用同样的判断逻辑即可 - 不同数据库的自定义抛错语法略有差异,比如PostgreSQL可以直接用
RAISE EXCEPTION '插入失败:n1字段取值必须在0到10的闭区间内';替换上述代码里的SIGNAL部分,核心校验逻辑不需要改动。
内容的提问来源于stack exchange,提问作者he8st
相关产品推荐
相关产品推荐

