やかんブログ

[MySQL]unique key制約のある数値を1つずつ増やす方法

2008年08月28日(木)08:34|谷口

谷口です。

今回はMySQLのちょっとした小技を紹介します。 とあるプロジェクトのテスト中に登録データのid (int型の主キー)が一定の値ずつずれてしまったときに、 元に戻すために必要となりました。

例えば、下記のようなテーブルがあったとします。 テーブル定義

フィールド名補足
idint(11)primary key, auto inclement
namevarchar(255) 

データ

idname
1name1
2name2
3name3

このようなテーブルに対して、一斉にidを1ずつ増やそうとすると… mysql> UPDATE table SET id=id+1; ERROR 1062 (23000): Duplicate entry '2' for key 1

当然のようにエラーになります。 これを回避するためには大きい順に処理をさせれば良いので、 ORDER BYを使ってみることにしました。

mysql> UPDATE table SET id=id+1 ORDER BY id DESC; Query OK, 3 rows affected (0.00 sec) Rows matched: 3 Changed: 3 Warnings: 0 mysql>SELECT * FROM table; +--+--------+ | id| name | +--+--------+ | 2 | name1 | +--+--------+ | 3 | name2 | +--+--------+ | 4 | name3 | +--+--------+

ちゃんとWarningもなく実行されました。 同様に、少なくする場合は ORDER BY id ASC で実行できます。

primary key を auto increment にしている場合などに使えますが、 外部キーとして参照されている場合はエラーになることもありますので、注意してください。 ま、そんなに使う機会はないと思いますが・・・。

UPDATE文でもORDER BY使えるんですね~、というお話でした。

参考:MySQL :: MySQL 4.1 リファレンスマニュアル :: 6.4.4 UPDATE 構文

この記事に関するお問い合わせはこちら

ページの先頭へ