Sposób, w jaki zwykle to robię, to używanie tymczasowej tabeli. Prawdopodobnie nie jest to wydajne obliczeniowo, ale wydaje się, że działa dobrze! Tutaj powielam rekord 99 w całości, tworząc 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;
Mam nadzieję, że to działa dobrze!