サイトのアイテムに固有の短い URL を生成しようとしています。たとえば、ユーザーがアイテムを追加すると、結果の URL は次のようになります。
http://example.com/item/abc
一意の識別子が 3 文字または 4 文字で構成されていることを期待していました。文字は文字と数字です。文字列をランダムに生成し、それらが一意であり、まだ使用されていないことを確認する代わりに、事前にすべてを生成してデータベースに保存できると考えました。次に、ユーザーがアイテムを追加すると、データベースから次の短縮 URL 文字列を選択して、そのアイテムに割り当てることができます。これはこれを解決する良い方法ですか?より良い方法はありますか?それらはすでに生成されているので、簡単になると思いました。ただし、2 つのアイテムに同じ識別文字列が割り当てられているという競合の問題が発生する可能性もあり、それがLOCK TABLES
最善の解決策であるかどうかはわかりません。
また、を使用せずにLOCK TABLES
、このようなものは MySQL で競合状態がないことを保証できますか?
update ids set item_id=1 WHERE id=(SELECT id FROM ids WHERE item_id IS NULL LIMIT 1);
そして、ID 1 を持つアイテムの ID を選択できますか? そのクエリの間、他のクエリはそれを主張できませんか?