[MySQL]unique key制約のある数値を1つずつ増やす方法
2008年08月28日(木)08:34|谷口
谷口です。
今回はMySQLのちょっとした小技を紹介します。 とあるプロジェクトのテスト中に登録データのid (int型の主キー)が一定の値ずつずれてしまったときに、 元に戻すために必要となりました。
例えば、下記のようなテーブルがあったとします。 テーブル定義
| フィールド名 | 型 | 補足 |
| id | int(11) | primary key, auto inclement |
| name | varchar(255) |
データ
| id | name |
| 1 | name1 |
| 2 | name2 |
| 3 | name3 |
このようなテーブルに対して、一斉に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使えるんですね~、というお話でした。