如何在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)上生成连锁主键?的主要内容,如果未能解决你的问题,请参考以下文章