如何在 CSV 导入时生成串联主键 (MariaDB / MySQL)?

How to generate a concatenated primary key on CSV import (MariaDB / MySQL)?

我将过去的发票从 CSV 文件导入 MariaDB (MySQL) table。

发票id建立在其他字段上: client-order[variant][-subinvoice]

例如。 0123-5c-0

到目前为止,id 的值是使用此 SQL 查询批量计算的:

UPDATE invoices SET
id = CONCAT (client,'-',
             order,
             IFNULL(variant,''),
             IF(subinvoice IS NULL, '',CONCAT('-',subinvoice))
             );

因为 id 列现在是 PRIMARY KEY,我 需要将上面的查询转换为生成 id [=35= 的触发器 ] 当注入来自 CSV 记录的数据时。

这是一种可能的解决方案。 (帮助我调试代码的用户 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 ;