INSERT INTO values ​​(...) ON DUPLICATE KEY UPDATE с несколькими значениями - PullRequest
3 голосов
/ 12 марта 2012

Будет ли это работать? (У меня нет сервера MySQL, доступного для тестирования>. <) </p>

туЬаЫе:
myid: целое число / первичный ключ
mydata: текст

INSERT INTO mytable VALUES (1,"new row"),(2,"brand new row"),(3,"yup another new row"), [.....more and more coma-separated parentheses with values], (1000,"guess what? yes new row") ON DUPLICATE KEY UPDATE mydata = "dang, this row already exists!";

Ответы [ 3 ]

4 голосов
/ 12 марта 2012

Да, это будет работать, но желательно сначала явно указать столбцы:

INSERT INTO mytable
  (myid, mydata)
   VALUES (1,"new row"),(2,"brand new row"),(3,"yup another new row")

Кроме того, одиночные кавычки немного более синтаксически переносимы, хотя MySQL будет обрабатывать их правильно.

   VALUES (1,'new row'),(2,'brand new row'),(3,'yup another new row')

Обратите внимание, что если у вас уже есть значения в mytable, вы можете столкнуться с коллизиями первичного ключа для id.Вам нужно будет решить, какие действия следует предпринять в этих обстоятельствах, и применить ON DUPLICATE KEY соответственно.

2 голосов
/ 12 марта 2012

Не понимаю, почему нет:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]

из http://dev.mysql.com/doc/refman/5.5/en/insert.html. Здесь есть даже пример

INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6)
  ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);
0 голосов
/ 12 марта 2012

Да, будет. Но если вы выполняете действительно большие операторы SQL - будьте осторожны при достижении максимального размера SQL (я думаю, по умолчанию 1 МБ), вы можете начать получать некоторые странные ошибки MySQL при достижении этой длины

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...