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 table2wörtlich kopiert werden, und table1wird 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.