如何在 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 ;
我将过去的发票从 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 ;