Eu tenho table1
e table2
no MySQL. auto_increment
Ambos têm uma chave primária id
.
Se os esquemas de tabela corresponderem e eu fizer INSERT INTO table1 (SELECT * FROM table2)
o que acontece com as novas linhas inseridas em table1
? Eles mantêm seus id
valores antigos e geram conflitos quando uma linha de table1
tem o mesmo id
? Os novos valores são gerados pelo auto_increment? Depende do mecanismo de armazenamento ou bloqueio?
Você pode inserir em uma coluna de incremento automático e especificar um valor. Isto é bom; ele simplesmente substitui o gerador de incremento automático.
Se você tentar inserir um valor NULL ou 0 ou
DEFAULT
, ou se você omitir a coluna de incremento automático das colunas em sua instrução INSERT, isso ativará o gerador de incremento automático.Então, tudo bem
INSERT INTO table1 SELECT * FROM table2
(a propósito, você não precisa dos parênteses). Isso significa que os valores de idtable2
serão copiados literalmente e nãotable1
gerarão novos valores.Se você deseja
table1
gerar novos valores, não pode fazerSELECT *
. Ou você usa null ou 0 para a coluna id:Ou então você omite a coluna da lista de colunas da instrução INSERT e da lista de seleção da instrução SELECT:
Antes que você pergunte, não há sintaxe no SQL para "selecionar * exceto para uma coluna". Você precisa soletrar a lista completa de nomes de coluna que deseja inserir.
O id do select será o mesmo valor inserido na tabela. Isso resultará em um erro se você estiver tentando duplicar as linhas existentes.
Isso pode ser alcançado com alguma criatividade:
Isso resultará na nova linha obtendo um id incrementado automaticamente em vez do id da linha selecionada.