【问题标题】:Mariadb database trigger before insert fails if field value is null如果字段值为空,则插入前 Mariadb 数据库触发器失败
【发布时间】: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 不要使用您的解决方案编辑您的帖子。相反,将其发布为答案。

标签: triggers mariadb


【解决方案1】:

我找到了一个解决方法 --- 我可以通过将 IFNULL 添加到所有列来实现它 -> IFNULL(NEW.col2,'NULL')。在我看来,这是额外的工作,但它现在正在工作。

【讨论】: