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

En MySQL, ¿puedo copiar una fila para insertarla en la misma tabla?

Usé la técnica de Leonard Challis con algunos cambios:

CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM table WHERE primarykey = 1;
UPDATE tmptable_1 SET primarykey = NULL;
INSERT INTO table SELECT * FROM tmptable_1;
DROP TEMPORARY TABLE IF EXISTS tmptable_1;

Como tabla temporal, nunca debe haber más de un registro, por lo que no tiene que preocuparse por la clave principal. Establecerlo en nulo permite que MySQL elija el valor en sí mismo, por lo que no hay riesgo de crear un duplicado.

Si quiere estar súper seguro de que solo está obteniendo una fila para insertar, puede agregar LIMIT 1 al final de la línea INSERT INTO.

Tenga en cuenta que también agregué el valor de la clave principal (1 en este caso) al nombre de mi tabla temporal.