2012-04-21 7 views
0

私にはフラッシュゲームがありました。ユーザーには多くのアイテムがありました。このSQL重複行はどのように発生しましたか?

id - user_id - item_type_id - quantity 

ユーザがアイテムを取得するたびに、私は、ユーザーが既にそのアイテムタイプの行を有するかどうかを確認するために、データベース上で選択を行います。各項目は、列とデータベース内のテーブルの行です。存在しない場合は挿入され、そうでない場合は数量が増えてコミットされます。すべては常にトランザクション内にあります。

ゲームが大量になると、重複したアイテムの行が表示されることがあります。今は、重複行をチェックして数量をマージし、二重行を削除するselectを実行します。

  • どのようにこの問題が起こるのでしょうか?
  • 問題を回避するにはどうすればよいですか?

私はMySQLを使用しています。

答えて

4

列ペアuser_idおよびitem_type_idに一意制約(インデックス)があることを確認する必要があります。そうしないと、システムは重複したエントリを、あなたが見つけたのとまったく同じように許可することができます。

+0

ありがとうございます。列ペアの一意制約については、このために使用される一意の列ペアはわかりません –

1

更新時に挿入しようとするとgettintgにエラーが発生しないようにするには、ON DUPLICATE句を使用できます。それを使用する方法についてはthisのリンクを参照してください。

関連する問題