Executando verificação de segurança...
1

Como copiar uma linha de uma tabela MySQL para outra ignorando ID #SQL

INSERT INTO tabela_destino (coluna1, coluna2, coluna3)
SELECT coluna1, coluna2, coluna3
FROM tabela_origem
WHERE id <> ID_DA_LINHA_A_SER_IGNORADA;

Neste exemplo, "tabela_destino" é o nome da tabela para a qual você deseja copiar a linha, e "tabela_origem" é o nome da tabela da qual você está copiando a linha. "coluna1", "coluna2" e "coluna3" são os nomes das colunas que você deseja copiar, e "ID_DA_LINHA_A_SER_IGNORADA" é o ID da linha que você deseja ignorar ao copiar.

Carregando publicação patrocinada...
1

Se você precisar fazer isso para muitas linhas, acredito que seja mais interessante criar um script em Python, Node ou PHP para fazer uma única consulta com todos os dados que você precisa da tabela A para inserir na tabela B (sem usar o mesmo id) iterando os dados com um loop e inserindo na tabela B. Mas eu faria um START TRANSACTION antes do laço e um COMMIT depois do laço se der tudo certo. Se der errado, faria um comando ROLLBACK. A maioria das bibliotecas para manipulação de banco de dados já devem ter estas funções.

Mas para fazer com um único registro em SQL, fiz um exemplo bem simples no SQL Fiddle.
http://sqlfiddle.com/#!9/4a9f5f/1

Acredito que seja algo deste tipo.


-- cria a tabela clientes
CREATE TABLE clientes (
    id int NOT NULL AUTO_INCREMENT,
    nome varchar(255) NOT NULL,
    idade int NOT NULL,
    PRIMARY KEY (id)
);
   
-- insere alguns clientes
INSERT INTO clientes
    (`id`, `nome`, `idade`)
VALUES
    (1, 'Jhon', 38),
    (2, 'Lucas', 25),
    (3, 'Bruno', 40),
    (4, 'João', 20)
;

-- cria a tabela clientes_antigos
CREATE TABLE clientes_antigos (
    id int NOT NULL AUTO_INCREMENT,
    nome varchar(255) NOT NULL,
    idade int NOT NULL,
    PRIMARY KEY (id)
);

-- insere um cliente
INSERT INTO clientes_antigos
    (`id`, `nome`, `idade`)
VALUES
    (1, 'Ernandes', 51)
;

-- copia Bruno de clientes para clientes_antigos sem copiar o ID
INSERT INTO clientes_antigos
(
    nome, idade
)
SELECT nome, idade
FROM clientes
WHERE clientes.id = 3;

-- mostra as duas tabelas completas
select * from clientes;
select * from clientes_antigos;