Mysql
在 INSERT (SELECT * FROM…) 中如何處理 auto_increment 鍵
我有
table1
並且table2
在 MySQL 中。兩者都有一個主auto_increment
鍵id
。如果表模式匹配並且我對
INSERT INTO table1 (SELECT * FROM table2)
插入到的新行會發生什麼table1
?當來自的行相同時,他們是否保留舊id
值並產生衝突?新值是由 auto_increment 生成的嗎?它取決於儲存引擎還是鎖定?table1``id
您可以插入到自動增量列中並指定一個值。這可以; 它只是覆蓋了自動增量生成器。
如果您嘗試插入 NULL 或 0 或 的值
DEFAULT
,或者如果您從 INSERT 語句的列中省略自動增量列,則會啟動自動增量生成器。所以,這很好
INSERT INTO table1 SELECT * FROM table2
(順便說一句,你不需要括號)。這意味著將逐字複製其中的 id 值*,*table2
並且table1
不會生成新值。如果你想
table1
生成新的值,你不能這樣做SELECT *
。您對 id 列使用 null 或 0:INSERT INTO table1 SELECT 0, col1, col2, col3, ... FROM table2;
否則,您從 INSERT 語句的列列表和 SELECT 語句的選擇列表中省略該列:
-- No id in either case: INSERT INTO table1 (col1, col2, col3) SELECT col1, col2, col3, ... FROM table2;
在你問之前,SQL 中沒有“select * except for one column”的語法。您必須拼出要插入的列名的完整列表。