Ви можете вставити в стовпчик з автоматичним збільшенням і вказати значення. Це добре; він просто перекриває генератор автоматичного збільшення.
Якщо ви спробуєте вставити значення 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 *, крім одного стовпця". Ви повинні прописати повний список імен стовпців, які ви хочете вставити.