探しているものと呼ばれる新しいフィールドが追加されたデータの大きなテーブルがuniq_id
あります。これを実行するためのスクリプトを記述しなくても、行ごとにこのフィールドを更新およびインクリメントするクエリを実行できます。
何か案は?
探しているものと呼ばれる新しいフィールドが追加されたデータの大きなテーブルがuniq_id
あります。これを実行するためのスクリプトを記述しなくても、行ごとにこのフィールドを更新およびインクリメントするクエリを実行できます。
何か案は?
そのように考えてください(あなたの構造なしでは改善するのは難しいです)
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;
テーブルには他にどのような列がありますか? 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 引数を返します。最初の行の列の値を効果的に確立します。)