Tho*_*son 14 mysql primary-key auto-increment
我有table1
和table2
在 MySQL 中。两者都有一个主auto_increment
键id
。
如果表模式匹配并且我对INSERT INTO table1 (SELECT * FROM table2)
插入到的新行执行什么操作table1
?id
当一行 fromtable1
相同时,它们是否保留旧值并产生冲突id
?新值是否由 auto_increment 生成?它取决于存储引擎还是锁定?
Bil*_*win 17
您可以插入自动增量列并指定一个值。这可以; 它只是覆盖自动增量生成器。
如果您尝试插入 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;
Run Code Online (Sandbox Code Playgroud)
否则,您可以从 INSERT 语句的列列表和 SELECT 语句的选择列表中省略该列:
-- No id in either case:
INSERT INTO table1 (col1, col2, col3) SELECT col1, col2, col3, ... FROM table2;
Run Code Online (Sandbox Code Playgroud)
在您询问之前,SQL 中没有“选择 * 除了一列”的语法。您必须拼出要插入的列名称的完整列表。