Sättet jag brukar göra är att använda ett tillfälligt bord. Det är förmodligen inte beräkningseffektivt men det verkar fungera ok! Här duplicerar jag rekord 99 i sin helhet och skapar rekord 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;
Hoppas det fungerar bra för dig!