簡體   English   中英

INSERT INTO…SELECT *中的列順序重要嗎?

[英]Order of columns in INSERT INTO … SELECT * matters?

假設我在MySQL DB中有2個表:

表格1

  • ID
  • 名稱
  • 類型

表2

  • ID
  • 類型
  • 名稱

我想使用此語法從表1到表2導入一行,而不是命名所有列:

INSERT INTO Table2 SELECT * FROM Table1 WHERE ID = 101

列的順序不同是否重要? 或者,只要所有列都具有相同的名稱,它將起作用嗎?

這兩個表中的每一個都有實際的列順序,您可以通過檢查信息模式表來看到。 但是 ,您不應依賴於此,因為它可能在將來的某個時候發生變化。

因此,最佳實踐是始終指定INSERT涉及的列,包括INSERT INTO ... SELECT

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

無論每個表中的基礎列順序如何,上面的查詢都將始終如您所願。

順序很重要。 名稱無關緊要。

最好按所需順序顯式命名列,而不要使用select *,而不要從插入端完全省略它們。

這意味着任何人都可以很清楚地看到它在做什么,SQL引擎不會誤解該指令,而且對任何一個表的定義所做的任何更改(例如,添加的字段或更改的順序)都不會中斷查詢。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM