自動インクリメント列に挿入して値を指定できます。これで結構です。自動インクリメントジェネレーターをオーバーライドするだけです。
NULLまたは0またはの値を挿入しようとした場合DEFAULT
、またはINSERTステートメントの列から自動インクリメント列を省略した場合、これにより自動インクリメントジェネレーターがアクティブになります。
したがって、問題INSERT INTO table1 SELECT * FROM table2
ありません(ところで、括弧は必要ありません)。つまり、のid値はtable2
そのままコピーされ、新しい値は生成table1
されません。
新しい値を生成したい 場合はtable1
できませんSELECT *
。id列にnullまたは0を使用します。
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 * for one column」以外の構文はありません。挿入する列名の完全なリストを入力する必要があります。