Sie können in eine Spalte für die automatische Inkrementierung einfügen und einen Wert angeben. Das ist okay; Es überschreibt einfach den Auto-Inkrement-Generator.
Wenn Sie versuchen, einen Wert von NULL oder 0 einzufügen DEFAULT
, oder wenn Sie die Auto-Inkrement-Spalte in den Spalten Ihrer INSERT-Anweisung weglassen, wird der Auto-Inkrement-Generator aktiviert.
Es ist also in Ordnung INSERT INTO table1 SELECT * FROM table2
(Sie brauchen übrigens keine Klammern). Dies bedeutet , dass die ID in Werte table2
wörtlich kopiert werden, und table1
wird nicht neue Werte generieren.
Wenn Sie neue Werte generieren möchten table1
, können Sie dies nicht tun SELECT *
. Entweder verwenden Sie null oder 0 für die ID-Spalte:
INSERT INTO table1 SELECT 0, col1, col2, col3, ... FROM table2;
Oder Sie lassen die Spalte sowohl in der Spaltenliste der INSERT-Anweisung als auch in der Auswahlliste der SELECT-Anweisung weg:
-- No id in either case:
INSERT INTO table1 (col1, col2, col3) SELECT col1, col2, col3, ... FROM table2;
Bevor Sie fragen, gibt es in SQL keine Syntax für "select * außer einer Spalte". Sie müssen die vollständige Liste der Spaltennamen buchstabieren, die Sie einfügen möchten.