エンタープライズ アプリケーションのデータ インポート手順をリファクタリングしていて、より良い解決策を見つけたいスニペットに出会いました。データをインポートするときは、データ セットごとに一意のエンティティを作成する必要があり、この ID を順番に割り当てるために使用されるフィールドにカウンターがあります。フィールドを読み取って次の空き ID を取得し、その後それをインクリメントして次回に備えます。
現時点では、これは「C」で記述された元のアプリで 2 つのステップで行われます。
SELECT idnext FROM mytable;
UPDATE mytable SET idnext = idnext + 1;
複数のプロセスが同じことを行う場合、明らかに競合状態が発生します。
編集:重要な相互要件:データベース/フィールド定義に触れることはできません。これにより、シーケンスが除外されます。
私たちは perl で書き直しています。私は同じことをしたいと思っていますが、より良いものです。原子的な解決策がいいでしょう。残念ながら、私の SQL スキルは限られているため、集合知に頼っています :-)