1

新しいレコードが作成されるたびに、1 つの MySql テーブルに乱数を格納し、乱数をランダムに取得して別のテーブル列に挿入したいと考えています。乱数表から取得した数値を使用したまま削除したい。

乱数は 3 桁で、900 個あります。

ここで、一意の乱数を使用して挿入をトリガーする問題について説明しているいくつかの投稿を読みました。この方法は信頼性が高く、問題がほとんど発生しないため、この方法を使用したいと考えています。

上記を実現するSQLクエリの例を教えてください。(SQL クエリがこれを行うための推奨される方法でない場合は、より良い方法をお勧めします。)

あなたが与えることができるどんな助けにも感謝します.

ここで 2 つの提案をまとめて、次のトリガーとクエリを試しました。

CREATE TRIGGER rand_num before 
INSERT ON uau3h_users FOR EACH ROW 
insert into uau3h_users (member_number) 
select random_number from uau3h_rand900 
where random_number not in (select member_number from uau3h_users) 
order by random_number 
limit 1

しかし、そのテーブルには既にトリガーが接続されているようで、新しいトリガーが競合を引き起こし、削除するまで動作が停止しました。別の方法を使用して同じことを達成する方法についてのアイデアはありますか?

4

2 に答える 2

1

900 レコードしか扱っていないため、パフォーマンスは大きな問題ではありません。

テーブルに単一の挿入を行う場合は、次のようなことができます。

insert into t(rand)
    select rand
    from rand900
    where rand not in (select rand from t)
    order by rand()
    limit 1

つまり、1 つのテーブルから継続的に削除して別のテーブルに移動する必要はありません。まだ存在しない値を挿入することを選択できます。パフォーマンスが問題になる場合は、インデックスが役に立ちます。

于 2013-04-16T23:24:25.313 に答える