Как создать объединенный первичный ключ при импорте в CSV (MariaDB / MySQL)? - PullRequest
0 голосов
/ 20 апреля 2019

Я импортирую прошлые счета из файлов 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 теперь является ПЕРВИЧНЫМ КЛЮЧОМ, мне необходимо преобразовать вышеуказанный запрос в триггер , который генерирует id "на лету", когда вводятся данные из записей 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 ;

1 Ответ

0 голосов
/ 20 апреля 2019

Вот триггер, который синтаксически в порядке. Обратите внимание на использование коалесц

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 ;
...