Chat (Lingr.com)
Informaiton
Daily
Column
- MySQL日本語の旅(5/1)
- アクセス向上秘伝(5/9)
- 一風変ったHaskellλ門(6/13)
- SICP Answer Book (5/31) 問題3.26追加
Zope Solution
Extra
アーカイブ
OSS案内所
Site Info
関連リンク
2005-09-30 [MySQL] 主キーがなくて重複したレコードを削除し、ALTER TABLEで主キーを追加する
主キーがないテーブルだといくらでも重複できてしまう。
mysql> CREATE TABLE duptest (id INT); Query OK, 0 rows affected (0.03 sec) mysql> INSERT INTO duptest VALUES (100); Query OK, 1 row affected (0.01 sec) mysql> INSERT INTO duptest VALUES (100); Query OK, 1 row affected (0.00 sec) mysql> SELECT * FROM duptest; +------+ | id | +------+ | 100 | | 100 | +------+ 2 rows in set (0.00 sec)
こりゃまずいと思って、 ALTER TABLEで主キーを追加しようと思っても、 すでに重複行があるとエラーが発生する。
mysql> ALTER TABLE duptest ADD PRIMARY KEY (id); ERROR 1062: Duplicate entry '100' for key 1
かといって
DELETE FROM duptest WHERE id=100;
としてしまうと、重複したすべての行が消えてしまう。
こんなときはMySQLの邪悪なオプション、LIMITを使う。
mysql> DELETE FROM duptest WHERE id=100 LIMIT 1; Query OK, 1 row affected (0.00 sec)
LIMIT 1とすれば1行だけ削除できる。 (ただし、どの行が削除されるかは分からない)
mysql> ALTER TABLE duptest ADD PRIMARY KEY (id); Query OK, 1 row affected (0.01 sec) Records: 1 Duplicates: 0 Warnings: 0
--yasuyuki