Вы можете вставить в столбец автоинкремента и указать значение. Это хорошо; он просто переопределяет генератор автоинкремента.
Если вы попытаетесь вставить значение NULL или 0 или DEFAULT
, или если вы опустите столбец автоинкремента из столбцов в вашем операторе INSERT, это активирует генератор автоинкремента.
Так что это нормально INSERT INTO table1 SELECT * FROM table2
(кстати, вам не нужны скобки). Это означает, что значения id в table2
будут скопированы дословно, и неtable1
будут генерировать новые значения.
Если вы хотите table1
генерировать новые значения, вы не можете сделать SELECT *
. Либо вы используете ноль или 0 для столбца id:
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 *, кроме одного столбца». Вы должны изложить полный список имен столбцов, которые вы хотите вставить.