【发布时间】:2025-12-22 07:45:16
【问题描述】:
我正在尝试使用数据库触发器在表上执行插入时捕获(审计)。当其中一个字段为空时,插入不会处理。我已经通过从插入中删除空列证明了这一点(对我自己)。
如果 NEW.col2 中的数据为 NULL,则示例 1 中的插入不会执行,当我从插入中删除 col2 时,如示例 2 所示,它可以工作。
示例 1 - insert into table_a (col1,col2,col3) values (NEW.col1,NEW.col2,NEW.col3);
示例 2 - insert into table_a (col1,col3) values (NEW.col1,NEW.col3);
为什么它不起作用,我该怎么做才能克服这个问题?
我知道完成此任务的其他方法,但这是我们需要使用的解决方案 - 数据库触发器/捕获插入。
【问题讨论】:
-
col2是否声明为NOT NULL DEFAULT xxx?这可以解释它 -
不,它允许为空。插入的字段必须有一个值或 NEW.field 导致问题。即使值为空,也必须是使用 NEW.field 的一种方式
-
...values (NEW.col1, COALESCE(NEW.col2, 0), NEW.col3);可以作为替代方案吗? ... 而不是 0(第二个参数),可以是该列支持的任何值。 docs on coalesce 如果不熟悉的话。 -
@mike 不要使用您的解决方案编辑您的帖子。相反,将其发布为答案。