0

私はフラッシュゲームをしました。ユーザーは多くのアイテムを持っていました。各項目は、データベース内のテーブルの行であり、列があります。

id - user_id - item_type_id - quantity

ユーザーがアイテムを取得するたびに、データベースでselectを実行して、ユーザーがそのアイテムタイプの行を既に持っているかどうかを確認します。存在しない場合は挿入され、存在しない場合は数量を増やしてコミットします。常にトランザクション内のすべて。

ゲームのトラフィックが多い場合、アイテムの行が重複して表示されることがあります。今、私は選択を実行して重複行をチェックし、数量をマージして重複行を削除します。

  • この問題はどのように発生しますか?
  • どうすれば問題の発生を防ぐことができますか?

MySQLを使用しています。

4

2 に答える 2

4

user_id列ペアとに一意の制約 (インデックス) があることを確認する必要がありますitem_type_id。そうしないと、システムが重複したエントリを許可する可能性があります。

于 2012-04-21T12:38:31.350 に答える
1

更新が必要なときに挿入しようとしたときにgettintgエラーを回避するには、ONDUPLICATE句を使用できます。使用方法については、このリンクを参照してください。

于 2012-04-21T13:03:55.177 に答える