Necesito duplicar un registro a través de DOP. ¿Me puedes ayudar?
Respuestas
0 para la respuesta № 1Utilizar INSERT ... SELECT
Por ejemplo;
INSERT INTO `foo` (`name`)
(SELECT `name`
FROM `foo`
WHERE `id` = 1)
En resumen, no es necesario que especifique los nombres de los campos (no agregue las claves primarias a la lista de campos en la lista de campos). INSERT
o SELECT
)
Ejemplo ilustrado
CREATE TABLE `dupe` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`name` varchar(5) NOT NULL,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
INSERT INTO `dupe` (id, name) VALUES(1, "bar");
Entonces, ahora tenemos una tabla con una clave principal, por lo que no podemos "fácilmente" duplicar filas.
INSERT INTO `dupe`
SELECT * FROM `dupe` WHERE `name` = "bar"
[Err] 1062 - Duplicate entry "1" for key "PRIMARY"
Ah ok Vamos a especificar los campos de los que queremos duplicar valores.
Queremos duplicar la primera fila, corremos;
INSERT INTO `dupe` (`name`)
SELECT `name` FROM `dupe` WHERE `name` = "bar";
Ahora hemos duplicado la fila, pero no la clave principal.
mysql> select * from dupe;
+----+------+
| id | name |
+----+------+
| 1 | bar |
| 2 | bar |
+----+------+
2 rows in set