mysql - 如何在 CSV 导入(MariaDB/MySQL)上生成串联主键?

标签 mysql triggers composite-primary-key

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

发票 id 是基于其他字段构建的: 客户订单[变体][-subinvoice]

例如。 0123-5c-0

到目前为止,id 的值是使用以下 SQL 查询批量计算的:

UPDATE invoices SET
id = CONCAT (client,'-',
             order,
             IFNULL(variant,''),
             IF(subinvoice IS NULL, '',CONCAT('-',subinvoice))
             );

由于 id 列现在是 PRIMARY KEY,我需要将上述查询转换为触发器,以便在当注入(inject)来自 CSV 记录的数据时,会出现“fly”。

这是一种可能的解决方案。 (用户 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 ;

关于mysql - 如何在 CSV 导入(MariaDB/MySQL)上生成串联主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55772775/

相关文章:

php - 将随机字符串添加到 $_SESSION

php - 使用 WHERE 选择所有内容

c# - MouseEnter WPF 上的发光效果

MySql插入具有触发器的表时出现错误1054

database - 是否有可能有一个不覆盖引用表的整个主键的外键?

sql - 自增复合主键

java - 具有基于注释的复合主键的 Hibernate createCriteria 查询

MySQL - 当外键更改时,如何使旧键的一行同时删除?

mysql - 使用现有条件哈希创建 OR 语句

WPF触发器更改光标