sql >> Base de Datos >  >> RDS >> Mysql

Copiar fila pero con nueva identificación

Digamos que su tabla tiene los siguientes campos:

( pk_id int not null auto_increment primary key,
  col1 int,
  col2 varchar(10)
)

luego, para copiar valores de una fila a la otra fila con un nuevo valor clave, la siguiente consulta puede ayudar

insert into my_table( col1, col2 ) select col1, col2 from my_table where pk_id=?;

Esto generará un nuevo valor para pk_id campo y copiar valores de col1 y col2 de la fila seleccionada.

Puede ampliar esta muestra para aplicar a más campos en la tabla.

ACTUALIZAR :
Con el debido respeto a los comentarios de JohnP y Martin -

Podemos usar la tabla temporal para almacenar en búfer primero desde la tabla principal y usarla para copiar a la tabla principal nuevamente. La mera actualización del campo de referencia pk en la tabla temporal no ayudará, ya que podría estar presente en la tabla principal. En su lugar, podemos eliminar el campo pk de la tabla temporal y copiar todos los demás en la tabla principal.

Con referencia a la respuesta de Tim Ruehsen en la publicación recomendada :

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 esto ayude.