【发布时间】: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 = '' 时,我没有在示例中看到声明
-
如您在示例中看到的 SET NEW.created_date 未声明。所以任何带有 NEW 的东西都不需要声明