应使用逻辑表达式判断跨日非业务时间如(HOUR(NOW()) 22 OR HOUR(NOW()) 6)避免用BETWEEN导致逻辑错误并注意时区与日期完整性。触发器里怎么判断当前时间是否属于非业务时间核心是用数据库内置的时间函数获取当前时刻再和预设的业务时间段做逻辑比较。不同数据库语法略有差异但思路一致取出 HOUR(NOW()) 或 EXTRACT(HOUR FROM NOW())判断是否落在允许范围内。常见错误是只比小时、忽略日期或时区。比如把“22:00–06:00”简单写成 HOUR(NOW()) BETWEEN 22 AND 6——这永远为假因为 22 不可能 HOUR(NOW()) 22 OR HOUR(NOW()) 。MySQL 推荐用 HOUR(NOW())注意它返回 0–23不带秒毫秒够用PostgreSQL 用 EXTRACT(HOUR FROM NOW())结果也是整数但要注意 NOW() 默认带时区确保数据库时区和业务时区一致查 SHOW timezoneOracle 用 TO_NUMBER(TO_CHAR(SYSDATE, HH24))别用 HH12 小时制否则凌晨 1 点会变成 1和下午 1 点混淆INSERT/UPDATE/DELETE 触发器里如何中止非法操作触发器不能直接 “return false”必须靠抛异常来中断执行。关键是选对异常类型既要让操作失败又不能掩盖真实原因。常见错误是用 RAISE NOTICEPostgreSQL或 SELECT msgMySQL——这些只是输出不阻止执行。也有人误用 SIGNAL SQLSTATE 45000 但没写 MESSAGE_TEXT导致报错信息空洞运维排查困难。MySQL 5.5 必须用 SIGNAL SQLSTATE 45000 SET MESSAGE_TEXT 非业务时间禁止修改数据PostgreSQL 用 RAISE EXCEPTION 非业务时间禁止修改数据支持变量拼接比如 RAISE EXCEPTION 当前时间 % 不在业务时段内, NOW()Oracle 用 RAISE_APPLICATION_ERROR(-20001, 非业务时间禁止修改数据)错误号必须是 -20000 到 -20999 之间为什么不能只在应用层校验而要加数据库触发器触发器是最后一道防线。应用层校验容易绕过直连数据库的脚本、DBA 临时维护、旧系统未升级、甚至开发本地测试时随手 INSERT 都可能漏掉校验逻辑。 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能