如何在CSV导入(MariaDB / MySQL)上生成连锁主键?

问题描述 投票:0回答:1

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

发票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,所以当需要注入CSV记录中的数据时,我需要将上面的查询转换为“动态”生成id的触发器。

这是一种可能的解决方案。 (帮助我调试代码的用户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 ;
mysql triggers composite-primary-key
1个回答
0
投票

这是一个语法上可以接受的触发器。注意使用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 ;
© www.soinside.com 2019 - 2024. All rights reserved.