2009-06-01 9 views
1

MySQL 5.1で以下の処理を実行する最も簡単な方法はどれですか?テーブルPKの値をランダムに再割り当て

私は1から220まで実行されているプラ​​イマリキーを持つテーブルを持っています.PKは、行がテーブルに書き込まれた順番に応じて順番に実行されます。

このプライマリキーの値をランダムに再割り当てして、たとえば1行目(PKの1の場合)が19(たとえば)に、2行目が142(たとえば)に、row 3は例えば99となり、1から220の間のすべての数字がPKに再割り当てされるようになります。

これを行う簡単な方法はありますか?

おかげで、 ティム

答えて

0

更新Rand Functionと主キーフィールド。整数を取得するには、100,1000など(必要な数の大きさに応じて)を掛けて残りの10進数を切り捨てなければなりません。

あなたのスクリプトは、これを行うために書いたと思いますが、重複した番号が生成されていないことを確認して、更新しようとして失敗したことを確認する必要があります。私はループを介してこれを行うだろう、単一の更新ステートメントはRandの動作のために動作しませんでした。 (少なくとも他のRDBMSの場合)

これを行う理由を知ることは重要ですか?理由は私の答えを変更する可能性があります...

+0

ご返信ありがとうございます。私は、220番目の反復で、既に生成された数値を打つ確率は219/220となるように、より効率的な方法があるのだろうかと思っていました... 私がこれをやりたい理由は、それが入力された順序ではなく、ランダムに。 ありがとう –

2

SQL内で完全にそれを行う簡単な方法はありません。 (それほど価値のない複雑な方法が考えられます)アプリケーションレベルのロジックを担当することをお勧めします。

「カードシャッフリング」タイプの目的の場合は、プライマリキーではなくセカンダリユニークキーを使用することをお勧めします。

+0

+1意図しないものにPKを使用する。 – dkretz

0

ランダムな値をID列に割り当ててから並べ替え、並べ替えられた行の位置に基づいてIDを再割り当てしたいとします。

関連する問題