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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在CSV导入(MariaDB / MySQL)上生成连锁主键?相关的知识,希望对你有一定的参考价值。

我将过去的发票从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 ;
答案

这是一个语法上可以接受的触发器。注意使用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 ;

以上是关于如何在CSV导入(MariaDB / MySQL)上生成连锁主键?的主要内容,如果未能解决你的问题,请参考以下文章

如何将csv导入mysql和mysql导出csv

如何把csv文件批量导入到mysql数据库

如何通过 phpmyadmin 将 csv 文件导入 mysql

如何将 CSV 文件导入 MySQL 表

如何将 csv 文件导入 MySQL 工作台?

PHP Laravel:如何在将 xl/csv 导入 mysql 时避免重复数据?