Ви можете вставити в стовпчик з автоматичним збільшенням і вказати значення. Це добре; він просто перекриває генератор автоматичного збільшення.
Якщо ви спробуєте вставити значення NULL або 0 або DEFAULT, або якщо ви опустите стовпчик з автоматичним збільшенням із стовпців у вашому INSERT, це активує генератор автоматичного збільшення.
Отже, це добре INSERT INTO table1 SELECT * FROM table2(до речі, дужки не потрібні). Це означає, що значення id у table2буде скопійовано дослівно, і неtable1 буде генерувати нових значень.
Якщо ви хочете table1 генерувати нові значення, ви не можете цього зробити SELECT *. Або використовуйте null або 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 *, крім одного стовпця". Ви повинні прописати повний список імен стовпців, які ви хочете вставити.