0

とりわけ、列「email」と「username」を持つ「users」テーブルがあります。アカウントが作成されたときに、同じユーザー名または電子メールのアカウント (行) が存在しないことを確認したいと考えています。現在、プログラムは電子メールまたはユーザー名の行数が同じかどうかをチェックし、カウントがゼロの場合は電子メールとユーザー名を含む行を挿入します。

ただし、これは 2 つの別個のクエリであり、これはマルチスレッド Web アプリであるため、競合状態が発生する可能性があり、その結果、同じユーザー名を持つ 2 つのアカウントが作成され、どちらかがログインしようとすると問題が発生します。

だから、私の質問は: 単一の SQL クエリで、そのような行がない場合 (つまり、同じユーザー名を持つ場合) にのみ行を挿入する方法はありますか?

不思議に思っている人のために、私はルビーで Sequel gem を使用しています。

4

1 に答える 1

2

この問題を解決するための非常に良い方法の 1 つは、言及した列に一意の制約を定義することです。次に、重複を挿入しようとすると、トラップ可能なエラーで挿入が失敗します。

この方法を使用すると、データベースにアクセスするプログラムではなく、データベース自体とのデータ整合性を確保するための一貫して適用される一元化されたメカニズムも提供されます。

于 2013-07-09T04:07:50.153 に答える