INSERT INTO ... SELECT *中的列顺序重要吗?

时间:2019-04-15 12:31:48

标签: mysql sql

说我在MySQL数据库中有2个表:

表1

  • ID
  • 名称
  • 类型

表2

  • ID
  • 类型
  • 名称

我想使用此语法而不是命名所有列将表1中的行导入表2:

INSERT INTO Table2 SELECT * FROM Table1 WHERE ID = 101

这些列的顺序不同是否重要?还是只要所有列都具有相同的名称,它将起作用吗?

2 个答案:

答案 0 :(得分:7)

两个表中的每一个都有实际的列顺序,您可以通过检查信息模式表来看到。 但是,您不应该依赖它,因为它将来可能会改变。

因此,最佳实践是始终指定INSERT所涉及的列,包括INSERT INTO ... SELECT的情况:

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

无论每个表中的基础列顺序如何,上述查询都将始终如您所愿。

答案 1 :(得分:4)

顺序很重要。名称无关紧要。

最好以所需的顺序显式命名列,而不要使用select *,而不要从插入端完全省略它们。

这意味着任何人都可以很清楚地看到它在做什么,SQL引擎不会误解该指令,也不会对任何表的定义进行任何更改(例如,添加字段或更改顺序)的危险。不会中断查询。

例如(使用名称和顺序都不匹配的方案):

INSERT INTO Table2 (field1, field5, field2)
SELECT fieldA, fieldC, fieldX 
FROM Table1 
WHERE ID = 101