私が普段行っている方法は、一時テーブルを使用することです。おそらく計算効率は良くありませんが、問題なく機能しているようです。ここでは、レコード99全体を複製して、レコード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;
うまくいくことを願っています!