MysqlデータベースAUTO_INCREMENT自増シリアル番号ホッピング処理


Mysqlデータベース生成シリアル番号は通常big intタイプを使用し、AUTO_を設定します.INCREMENTはtrueで、insertが記録するたびにシーケンス番号が自動的に増加します.このような操作は基本的に問題ありません.甲がsidをできるだけスキップしてはいけないと提案した項目があります.上記の処理方法に問題があります.例えば、販売注文作成:1)様成主表記録、後生成細表レコード2)細表レコードデータ有効性検証時(製品在庫および7日間以内の生産計画手配検証、および累積未発注量<=在庫量+7日間以内の生産計画手配量、検証失敗)3)細表はinsertレコードせず、メインテーブルトランザクションはロールバックし、sidは増加してロールバックしない.次の注文が作成されると、シリアル番号sidがスキップされます.
ソリューション:プロジェクトに基づいてデータ量がそれほど多くないため、最も簡単なソリューションを選択しました.
select min(a.sid) + 1 from sale_so_bill a
where not exists(select b.sid from sale_so_bill b where b.sid - 1 = a.sid)

1)まず上のsqlで最小のホップ番号値を見つけることができるかどうか.2)見つかればinsertマスターテーブルsale_so_billの場合sid値を指定
このホップ番号処理案には2つの注意点があります.1)これで注文ソートに注意が必要になり、sidを使用して注文の前後順序を表すことはできません.2)ホップ番号の値を取得すると同時に問題が発生する可能性があり、複数の人が同じ値を取得すると、insert時に重複記録エラーが報告されます.