Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Copiar linha, mas com novo id


Digamos que sua tabela tenha os seguintes campos:
( pk_id int not null auto_increment primary key,
  col1 int,
  col2 varchar(10)
)

então, para copiar valores de uma linha para a outra linha com o novo valor de chave, a consulta a seguir pode ajudar
insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;

Isso gerará um novo valor para pk_id campo e copie valores de col1 e col2 da linha selecionada.

Você pode estender este exemplo para aplicar para mais campos na tabela.

ATUALIZAÇÃO :
Em respeito aos comentários de JohnP e Martin -

Podemos usar a tabela temporária para fazer o buffer primeiro da tabela principal e usá-la para copiar para a tabela principal novamente. A mera atualização do campo de referência pk na tabela temporária não ajudará, pois pode já estar presente na tabela principal. Em vez disso, podemos remover o campo pk da tabela temporária e copiar todos os outros para a tabela principal.

Com referência à resposta de Tim Ruehsen na postagem de referência :
CREATE TEMPORARY TABLE tmp SELECT * from my_table WHERE ...;
ALTER TABLE tmp drop pk_id; # drop autoincrement field
# UPDATE tmp SET ...; # just needed to change other unique keys
INSERT INTO my_table SELECT 0,tmp.* FROM tmp;
DROP TEMPORARY TABLE tmp;

Espero que isto ajude.