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