Estou tentando mover dados antigos de:
this_table >> this_table_archive
copiando todas as colunas. Eu tentei isso, mas não funciona:
INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < '2011-01-01 00:00:00');
Nota: as tabelas são idênticas e foram id
definidas como chave primária.
mysql
select
insert-into
Kyle
fonte
fonte
Respostas:
A sintaxe correta é descrita no manual . Tente o seguinte:
Se as colunas de identificação forem uma coluna de incremento automático e você já tiver alguns dados nas duas tabelas, em alguns casos, poderá omitir o ID da lista de colunas e gerar novos IDs para evitar inserir um ID que já exista no original tabela. Se sua tabela de destino estiver vazia, isso não será um problema.
fonte
Para a sintaxe, parece com isso (deixe a lista de colunas para implicitamente significar "todos")
Para evitar erros de chave primária, se você já possui dados na tabela de arquivamento
fonte
Além da resposta de Mark Byers:
Às vezes, você também deseja inserir detalhes codificados permanentemente; caso contrário, pode haver uma falha de restrição exclusiva, etc.
Aqui, o valor do domínio é adicionado por mim da maneira codificada para se livrar da restrição Exclusiva.
fonte
você não precisa de double () para o bit de valores? se não, tente isso (embora deva haver uma maneira melhor
fonte
INSERT INTO .. SELECT FROM
, nãoINSERT INTO .. VALUES
. Recurso diferente.Mais exemplos e detalhes
fonte