Solución:
La forma en que suelo hacerlo es utilizando una tabla temporal. Probablemente no sea computacionalmente eficiente, ¡pero parece funcionar bien! Aquí estoy duplicando el registro 99 en su totalidad, creando el registro 100.
CREATE TEMPORARY TABLE tmp SELECT * FROM invoices WHERE id = 99;
UPDATE tmp SET id=100 WHERE id = 99;
INSERT INTO invoices SELECT * FROM tmp WHERE id = 100;
¡Espero que funcione bien para ti!
La respuesta de Alex necesita cierto cuidado (p. Ej., Bloqueo o una transacción) en entornos multicliente.
Asumiendo el AUTO ID
campo es el primero en la tabla (un caso habitual), podemos hacer uso de transacciones implícitas.
CREATE TEMPORARY TABLE tmp SELECT * from invoices WHERE ...; ALTER TABLE tmp drop ID; # drop autoincrement field # UPDATE tmp SET ...; # just needed to change other unique keys INSERT INTO invoices SELECT 0,tmp.* FROM tmp; DROP TABLE tmp;
De los documentos de MySQL:
Usando AUTO_INCREMENT: También puede asignar explícitamente NULL o 0 a la columna para generar números de secuencia.
Usted SABE con certeza que la DUPLICATE KEY se activará, por lo que puede seleccionar el MAX (ID) +1 de antemano:
INSERT INTO invoices SELECT MAX(ID)+1, ... other fields ... FROM invoices AS iv WHERE iv.ID=XXXXX
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)