[英]Order of columns in INSERT INTO … SELECT * matters?
假設我在MySQL DB中有2個表:
表格1
表2
我想使用此語法從表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.