Массовая вставка или обновление, если 2 столбца таблицы уже существует MySQL - PullRequest
0 голосов
/ 09 марта 2020

У меня есть таблица отношений без первичного ключа:

ticket_id | type | value | code

Я хочу выполнить вставку и обновление в эту таблицу массовым методом, условие для обновления - если ticket_id и code вводятся повторяющиеся данные, затем обновляется запись типа или значения. Как я могу добиться этого?

например, я буду получать данные вставки, как это:

    [
      {
         "ticket_id":"1",
         "type":"name",
         "value":"Ben",
         "code":"person_name"
      },
      {
         "ticket_id":"1",
         "type":"phone",
         "value":"0812",
         "code":"person_phone"
      },
      {
         "ticket_id":"1",
         "type":"mail",
         "value":"ben@yours.com",
         "code":"person_mail"
      },
      {
         "ticket_id":"2",
         "type":"name",
         "value":"Jesse",
         "code":"person_name"
      },
      {
         "ticket_id":"2",
         "type":"phone",
         "value":"8272",
         "code":"person_phone"
      },
      {
         "ticket_id":"2",
         "type":"mail",
         "value":"jesse@mine.com",
         "code":"person_mail"
      }
   ]

затем данные обновления:

   [
      {
         "ticket_id":"1",
         "type":"name",
         "value":"Joe",
         "code":"person_name"
      },
      {
         "ticket_id":"1",
         "type":"phone",
         "value":"9810",
         "code":"person_phone"
      },
      {
         "ticket_id":"1",
         "type":"mail",
         "value":"joe@mine.com",
         "code":"person_mail"
      },
      {
         "ticket_id":"2",
         "type":"name",
         "value":"Rose",
         "code":"person_name"
      },
      {
         "ticket_id":"2",
         "type":"phone",
         "value":"0992",
         "code":"person_phone"
      },
      {
         "ticket_id":"2",
         "type":"mail",
         "value":"rose@yours.com",
         "code":"person_mail"
      }
   ]

1 Ответ

1 голос
/ 09 марта 2020

Вы можете использовать синтаксис insert ... on duplicate key - как прокомментировал RiggsFolly:

insert into mytable (ticket_id, type, value, code)
values(:ticket_id, :type, :value, :code)
on duplicate key update type = values(type), value = values(value)

Чтобы это работало, вам нужно уникальное ограничение на (ticket_id, code).

...