MySQLで既存のカラムにUNIQUE制約を追加する方法
MySQLで既存のカラムを一意(UNIQUE)にする方法
MySQLで既存のフィールド(カラム)を一意にするには、ALTER TABLEコマンドを使用してUNIQUE制約を設定します。本記事では、実際のコード例とともに、その手順をわかりやすく解説します。
1. サンプルテーブルを作成する
まず、動作確認用のテーブルを作成しましょう。
mysql> create table AddingUnique -> ( -> Id int, -> name varchar(100) -> ); Query OK, 0 rows affected (0.44 sec)
2. UNIQUE制約を追加する構文
既存のカラムにUNIQUE制約を追加するには、次の構文を使用します。
alter table テーブル名 add UNIQUE(カラム名);
3. 実際にUNIQUE制約を適用する
上記の構文を使って、「name」カラムにUNIQUE制約を追加してみます。
mysql> alter table AddingUnique add UNIQUE(name); Query OK, 0 rows affected (0.60 sec) Records: 0 Duplicates: 0 Warnings: 0
4. 重複データ挿入時の動作を確認する
UNIQUE制約を設定したことで、同じ値を持つレコードはテーブルに挿入できなくなります。重複データを登録しようとすると、エラー1062が発生します。
mysql> insert into AddingUnique values(1,'John'); Query OK, 1 row affected (0.15 sec) mysql> insert into AddingUnique values(1,'John'); ERROR 1062 (23000): Duplicate entry 'John' for key 'name' mysql> insert into AddingUnique values(2,'Carol'); Query OK, 1 row affected (0.18 sec) mysql> insert into AddingUnique values(3,'John'); ERROR 1062 (23000): Duplicate entry 'John' for key 'name' mysql> insert into AddingUnique values(4,'Smith'); Query OK, 1 row affected (0.18 sec)
上記の実行結果から、「John」という名前の2回目以降の挿入は拒否されていることがわかります。一方、Idが異なる「Carol」や「Smith」は問題なく登録されています。これは、UNIQUE制約が指定したカラムの値の重複のみを防ぐためです。Idなどの他のカラムの値が異なっていても、対象カラムの値が同一であれば挿入は失敗する点に注意してください。
5. 登録されたレコードを確認する
最後に、すべてのレコードを表示して結果を確認しましょう。
mysql> select *from AddingUnique;
以下が出力結果です。
+------+-------+ | Id | name | +------+-------+ | 1 | John | | 2 | Carol | | 4 | Smith | +------+-------+ 3 rows in set (0.00 sec)
このように、ALTER TABLE ... ADD UNIQUEを使えば、既存のテーブルのカラムに簡単に一意性制約を追加できます。データの整合性を保ちたい場合に非常に便利な機能なので、ぜひ活用してください。
-
MySQLで特定のフィールドの値を入れ替える(スワップする)方法
MySQLで特定のフィールドの値を入れ替える方法MySQLでは、UPDATE文とユーザー定義変数を組み合わせることで、特定のレコードの2つのカラムの値を簡単に入れ替えることができます。この記事では、実際のサンプルコードと実行結果を使って、手順をわかりやすく解説します。1. テーブルの作成まず、サンプル用のテーブルを作成しましょう。mysql> create table DemoTable( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Number1 in
-
MySQLでchar型カラムをdatetime型に変換する方法をわかりやすく解説
MySQLでは、char型として保存された日付文字列をdatetime形式に変換したいケースがあります。本記事では、REPLACE関数とSTR_TO_DATE関数を組み合わせて、「12/31/2017 10:50」のような米国式の日付文字列を「2017-12-31 10:50:00」というdatetime形式へ変換する手順を、実際のSQLと実行結果付きで解説します。サンプルテーブルの作成まず、テーブルを作成します。ここでは配送日(ShippingDate)をあえてchar型として宣言しています。mysql> create table DemoTable1472 &n