Порядок столбцов в INSERT INTO ... SELECT * имеет значение? - PullRequest
1 голос
/ 15 апреля 2019

Скажем, у меня есть 2 таблицы в БД MySQL:

Table1

  • ID
  • Имя
  • Тип

Таблица2

  • ID
  • Тип
  • Имя

И я хочу импортировать строку из Таблицы1 в Таблицу2, используя этот синтаксис, а не именовать все столбцы:

INSERT INTO Table2 SELECT * FROM Table1 WHERE ID = 101

Имеет ли значение тот факт, что столбцы находятся в другом порядке?Или, если все столбцы имеют одинаковые имена, это будет работать?

Ответы [ 2 ]

7 голосов
/ 15 апреля 2019

Существует фактический порядок столбцов для каждой из двух таблиц, который можно увидеть, просмотрев таблицу информационной схемы. Однако , вам не следует полагаться на это, потому что это может измениться в какой-то момент в будущем.

Таким образом, рекомендуется всегда указывать столбцы, связанные с INSERT, включаяв случае INSERT INTO ... SELECT:

INSERT INTO Table2 (ID, Name, Type)
SELECT ID, Name, Type
FROM Table1
WHERE ID = 101;

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

4 голосов
/ 15 апреля 2019

Порядок имеет значение.Имена не имеют значения.

Лучше явно указывать имена столбцов в том порядке, в котором они вам нужны, а не с помощью select *, а не опускать их полностью со стороны вставки.

Это означает, что это совершенно очевидно для всехЕсли вы прочитаете, что делает код, нет опасности того, что механизм SQL неправильно истолковывает инструкцию, а также любые изменения в определении любой таблицы (например, добавленные поля или измененный порядок) не нарушат запрос.

Например (используя сценарий, в котором ни имя, ни порядок не совпадают):

INSERT INTO Table2 (field1, field5, field2)
SELECT fieldA, fieldC, fieldX 
FROM Table1 
WHERE ID = 101
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...