InnoDBでは、INSERT IGNOREまたはON DUPLICATE KEY UPDATEを実行するたびに、何かが挿入されているかどうかに関係なく、テーブルがauto_incrementされます。IGNOREでInnoDBの自動インクリメントを行う方法はありますか?
この問題は、痛ましいほど厄介です。
これを回避する簡単な方法はありますか?
InnoDBでは、INSERT IGNOREまたはON DUPLICATE KEY UPDATEを実行するたびに、何かが挿入されているかどうかに関係なく、テーブルがauto_incrementされます。IGNOREでInnoDBの自動インクリメントを行う方法はありますか?
この問題は、痛ましいほど厄介です。
これを回避する簡単な方法はありますか?
特別なミューテックステーブルを使用して、INSERT IGNOREビヘイビアを模倣できます。
はこの記事を参照してください:
InnoDBはトランザクションをロールバックすることができます。つまり、あるテーブルに挿入したり、関連するレコードを別のテーブルに挿入したり、最初の挿入をロールバックしたりすることはできません。その間、一意のIDも必要とする最初のテーブルで他の挿入が発生する可能性があります。その場合、渡された自動インクリメントをあきらめることはできません。
INSERT IGNOREでは、InnoDBは挿入しようとするとすでにレコードがあるかどうかだけを知ることができます。挿入前に自動インクリメントが必要です。他のプロセスが同じことをしていて、選択と挿入の間に同じレコードを挿入している可能性があるため、挿入を検索することはできません。
フィールドの最大値を超えると思わない限り、心配する必要があります。 bigintについては、それは非常に大きいです。 Facebookはbigintを使用しており、まだ実行されていません。
これは問題ではない、それは望ましい機能です。 **その周りに**あるべきではありませんが、私はrepハンターがテーブルを変更し、増分カウントをリセットすることを示唆しています。ただしないでください。 –
多くの月前に私はそれをやらせて、データベーステーブルのIDを単調に増やすことについて心配しないように確信しました。 – Perry
以来、私はもっと幸せな人生を送ってきたと思います。データベースにそれをさせてください。最後の挿入IDを取得しようとしている場合は、トランザクション内でクエリをラップする必要があります。 IDの不足を心配している場合は、id colがunsignedに設定されていることを確認してください。 –