我将过去的发票从 CSV 文件导入到 MariaDB (MySQL) 表中。
发票 id
是基于其他字段构建的:
客户订单[变体][-subinvoice]
0123-5c-0
到目前为止,id
的值是使用以下 SQL 查询批量计算的:
UPDATE invoices SET
id = CONCAT (client,'-',
order,
IFNULL(variant,''),
IF(subinvoice IS NULL, '',CONCAT('-',subinvoice))
);
由于 id
列现在是 PRIMARY KEY,我需要将上述查询转换为触发器,以便在当注入(inject)来自 CSV 记录的数据时,会出现“fly”。
这是一种可能的解决方案。 (用户 P. Salmon 帮助我调试代码;感谢他!)
DELIMITER //
DROP TRIGGER IF EXISTS invoice_generate_id//
CREATE TRIGGER invoice_generate_id
BEFORE INSERT ON invoices
FOR EACH ROW
BEGIN
SET NEW.id = CONCAT (new.client,'-',
new.order,
IFNULL(new.variant,''),
IF(new.subinvoice IS NULL, '',CONCAT('-',new.subinvoice))
);
END//
DELIMITER ;
最佳答案
这是一个语法上正确的触发器。注意coalesce的使用
DELIMITER //
DROP TRIGGER IF EXISTS invoice_generate_id//
CREATE TRIGGER invoice_generate_id
BEFORE INSERT ON invoices
FOR EACH ROW
BEGIN
set NEW.id = CONCAT (new.client,'-',
new.order,
coalesce(concat('-',new.variant,''),''),
coalesce(concat('-',new.subinvoice,''),'')
)
;
END//
DELIMITER ;
关于mysql - 如何在 CSV 导入(MariaDB/MySQL)上生成串联主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55772775/