【问题标题】:Mariadb before trigger is not updating certain columns触发器之前的 Mariadb 未更新某些列
【发布时间】:2021-08-30 12:34:50
【问题描述】:

我正在使用 mariadb,并且我有一张发票表。每张发票都有一个唯一的 order_number,因为这是法律要求的。我创建了一个这样的插入前触发器:

DELIMITER //

CREATE OR REPLACE TRIGGER `set_invoice_ordernumber` BEFORE INSERT ON invoices FOR EACH ROW
BEGIN
  SET NEW.year_order_nr = (SELECT MAX(`year_order_nr`) + 1 FROM `invoices` WHERE `company_id`=NEW.company_id AND `year`=NEW.year AND `order_number` IS NOT NULL);
  SET NEW.order_number = CONCAT(NEW.year, '-', LPAD(NEW.year_order_nr, 8, 0));
END;
//

DELIMITER ;

当我执行发票的插入命令时,这些字段不会更新。如果我添加一个新列让我们说 e1 然后添加一行 SET e1=123;然后它确实会更新,这意味着触发器已执行。这是怎么回事???

没有抛出错误,只是完全忽略了这些字段。

【问题讨论】:

  • 使用前需要定义变量吗?
  • 你的意思是什么变量? SET NEW.year_order_nr 是要更新的行中的字段。使用 SET NEW.fieldname = '' 时,我没有在示例中看到声明
  • 正在寻找类似one 的问题,并从TechNet 找到了这个
  • 如您在示例中看到的 SET NEW.created_date 未声明。所以任何带有 NEW 的东西都不需要声明

标签: sql mariadb


【解决方案1】:

事实证明,很久以前在表上添加了另一个触发器,导致列设置为空。因此,如果发生这种情况,请确保没有其他触发器妨碍。在 phpmyadmin 中不显示任何触发器,因此请注意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多