0

探しているものと呼ばれる新しいフィールドが追加されたデータの大きなテーブルがuniq_idあります。これを実行するためのスクリプトを記述しなくても、行ごとにこのフィールドを更新およびインクリメントするクエリを実行できます。

何か案は?

4

2 に答える 2

1

そのように考えてください(あなたの構造なしでは改善するのは難しいです)

SET @rank = 0;
UPDATE <your table> JOIN (SELECT @rank:= @rank+ 1 AS rank, <your pk> FROM <your table> ORDER BY rank DESC)
AS order USING(<your pk>) SET <your table>.uniq_id = order.rank;

または簡単

SET @rank=0;
UPDATE <your table> SET uniq_id= @rank:= (@rank+1) ORDER BY <anything> DESC;
于 2012-06-12T08:17:01.067 に答える
0

テーブルには他にどのような列がありますか? MySQLで新しい列を定義するとAUTO_INCREMENT、1 から始まる連続した値が入力されます。ただし、問題があります。列はキー、または少なくともキーの一部である必要があります (詳細については、ドキュメントを参照してください)。テーブルに主キーがまだない場合は、次のように簡単に実行できます。

alter table MyTable add uniq_id int auto_increment, add primary key (uniq_id);

テーブルのキーを変更できず、新しい列の値を一度だけ入力したい場合は、次のupdateステートメントを使用できます。

update MyTable set uniq_id = (@count := coalesce(@count+1, 1));

(coalesceは最初の非 null 引数を返します。最初の行の列の値を効果的に確立します。)

于 2012-06-12T08:23:10.440 に答える