また詰まったので備忘です。
経緯
設計時点の漏れで、重複させてはいけないカラムがあることを発見してしまった私。
登録ロジック側で何とかしようと思いましたが、絶対に後々のバグの温床になると思ったので、MySQLのカラム自体にUNIQUE属性をつけることにしました。
しかし、さすがに今からテーブルの作り直しはしんどい。
ということで、テーブルのカラムに後付けでUNIQUE属性を追加することにしました。
方法
とはいえ、方法は簡単です。
以下のコマンドを打つだけで問題なく追加することができました。
alter table [テーブル名] add unique ([カラム名]);
実際に打ったコマンドはこちら。
alter table tbl_env add unique (env_name);
show columns from tbl_env;
+------------+--------------+------+-----+---------------------+-------------------------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------------------+-------------------------------+
| env_id | int(11) | NO | PRI | NULL | auto_increment |
| env_name | varchar(255) | NO | UNI | NULL | |
| comment | text | YES | | NULL | |
| created_at | datetime | NO | | current_timestamp() | |
| update_at | datetime | YES | | NULL | on update current_timestamp() |
| delete_at | datetime | YES | | NULL | |
+------------+--------------+------+-----+---------------------+-------------------------------+
KeyにきちんとUNIQUEが入っていることが確認できます。
ちなみに、すでに重複したレコードが登録されているカラムに対して以上のコマンドを打とうとすると、エラーを吐きます。
ERROR 1062 (23000): Duplicate entry '[レコード内容]' for key '[カラム名]'
ので、この作業を行うときはあらかじめ重複レコードを削除しておきましょう。
以上!簡単!
コメント