0

一度に最大100個のランダムコードのバッチを生成するシステムがあります。次に、それらはデータベースに挿入されます。私はコードジェネレーターを使用していますが、同様のコードが再度作成される可能性はほとんどありませんが、DBをチェックして重複がないかどうかを確認します。私の理論..

  $amount_of_codes


  while ($x != $amount_of_codes)
    {
    $code = gencode();
    $mysql_check = "SELECT code FROM data WHERE code = '$code'";
    $mysql_check_result = mysql_query($mysql_check);
    $check = mysql_num_rows($mysql_check_result);
     if (!$check)
      {
      mysql_query("INSERT INTO data(code) values('$code')")
      $x++
      } 
    }

散らかっているようですが、もっと良いアイデアはありますか?

4

3 に答える 3

1

Code列にUNIQUE制約を与えます。

CREATE TABLE Code
(
  Code ..
..
  CONSTRAINT Code_Unique UNIQUE (Code),
..
);

挿入するときは、データベースの例外/エラーをキャプチャするだけでよく、コードがすでに存在するかどうかを心配する必要はありません。

于 2012-10-16T09:46:04.400 に答える
1

散らかっています。さらに重要なことに、別のプロセスがチェックと挿入の間にそのコードを挿入する可能性がある競合状態の影響も受けます。

それを避けたい場合は、コード列を一意のキーにしてから、挿入してみてください。すでに存在する場合、そのアトミック操作はエラーを返すか、例外を発生させます。これをチェック/キャッチできます。

試行後のチェックを行うことにより、とにかくチェックする必要があるため、何も失うことはありません(前述の競合状態が発生した場合)。しかし、得られるのは原子性とよりクリーンなコードです。

于 2012-10-16T09:47:06.817 に答える
0

本当に簡単な解決策です。魔女がコードに入れた関数が、魔女がすでに存在しているコードに入らないようにしてください。

基本的に:

コードを生成する

コードが存在する場合はチェック

はい->新しいコードを生成します

いいえ->コードをdbに入れます

申し訳ありませんがスクリプトの時間はありません

于 2012-10-16T09:51:11.990 に答える