Iveは、基本的に2つの異なる機能、つまりコードと同じ意味でトランザクションを実行しています。このコードは、MySQLを使用して完全にPHPで書かれています。トランザクション後にテーブル内で予期しないIDオフセットが発生する
insert_into_table1()
{
// transact start
// perform delete from table1
// insert into table from select statement from the database
// commit if done, else rollback
}
insert_into_table2()
{
// transact start
// perform delete from table2
// insert into table data from table1 after some processing (but same number of rows)
// commit if done, else rollback
}
上記の擬似コードの一例です。 最初は、表は空です。 コードの実行後に問題が発生します。両方のテーブルはN個の行で挿入されます。
コードを再度実行すると、テーブルはdeleteコマンド(MySQL)を使用して空になります。そして、N個の行が両方のテーブルに再び挿入されます。
しかし、2回目以降の実行では、 'id'(これは両方のテーブルのオフセット1でauto_incrementにあります。値が変更されないことを確認しました。)フィールドは、N + 1、 2番目のテーブルには10のオフセットがありますが、N + 1でも続ける必要があります。
この現象が発生する理由とその修正方法を知りたいと思います。
私たちに何も言わない擬似定型コードではなく、実際のコードを見せてくれれば、理由や最終的なバグを見つけやすくなります。 –
'rollback if done'なのは何もありませんコミットされている? – jedifans
両方のテーブルに 'auto_increment'がありますか? 'truncate'ではなく' delete'を実行していますか? – Shaharyar