Указан ли порядок вставок для INSERT IGNORE ... SELECT? - PullRequest
1 голос
/ 01 июля 2019

У меня есть таблица типа:

CREATE TABLE {
  email VARCHAR PRIMARY,
  last_login DATE
}

И я могу заполнить выбранным набором результатов, например:

("a@b.c", "2019-01-01"),
("a@b.c", "2019-02-01")

Если я вставлю в эту таблицу, используя INSERT IGNORE ... SELECT,указано, какая строка вставляется, а какая игнорируется?

Найденная спецификация:

  • "Укажите IGNORE, чтобы игнорировать строки, которые могут привести к нарушениям дубликата ключа".из https://dev.mysql.com/doc/refman/5.5/en/insert-select.html. Но это не говорит о том, какой является дубликатом, а какой - не дубликатом.

1 Ответ

2 голосов
/ 01 июля 2019

Оператор insert не определяет порядок вставки строк - оператор select делает. Однако, если вы явно не определите порядок с помощью предложения order by, порядок select возвращает строки полностью в базе данных, и им нельзя доверять.

Другими словами, если вам важно, какая строка вставляется, а какая игнорируется, добавьте предложение order by в оператор select и убедитесь, что строка, которую вы хотите вставить, идет первой.

...