MySQLのUNIQUE制約とは?テーブルのカラムへの適用方法をわかりやすく解説
その名のとおり、MySQLのUNIQUE制約(ユニーク制約)は、テーブル内の特定のカラム(列)の値の一意性を保証するための制約です。この制約が設定されたカラムには、重複した値を挿入することができません。
UNIQUE制約を設定すると、内部的にはインデックスが作成され、そのインデックスが張られたカラム内のすべての値が必ず一意になるよう強制されます。なお、MySQLでは1つのテーブルに複数のUNIQUE制約を持つカラムを設定することも可能です。
UNIQUE制約の適用方法①:カラム定義時に指定する
UNIQUE制約は、カラムを定義する際に「UNIQUE」キーワードを付けることで適用できます。以下の例を見てみましょう。
mysql> Create table test3(ID INT UNIQUE, Name Varchar(20)); Query OK, 0 rows affected (0.16 sec)
上記のクエリでは、UNIQUE制約が設定された「ID」カラムを持つ「test3」というテーブルを作成しています。DESCRIBEステートメントを使うと、制約が正しく適用されているかを確認できます。
mysql> DESCRIBE test3; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(11) | YES | UNI | NULL | | | Name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.04 sec)
「Key」列に「UNI」と表示されていることから、IDカラムにUNIQUE制約が適用されていることがわかります。
UNIQUE制約の適用方法②:テーブル定義時に指定する
もうひとつの方法として、テーブル作成時にカラム定義とは別に「UNIQUE(ID)」のように記述することでも、UNIQUE制約を適用できます。
mysql> Create table test4(ID INT, Name Varchar(20),UNIQUE(ID)); Query OK, 0 rows affected (0.15 sec)
こちらも同様に、DESCRIBEステートメントで確認してみましょう。
mysql> DESCRIBE test4; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | ID | int(11) | YES | UNI | NULL | | | Name | varchar(20) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 2 rows in set (0.04 sec)
このように、どちらの方法でもIDカラムの「Key」列に「UNI」が表示され、UNIQUE制約が正しく適用されていることが確認できます。
まとめ
MySQLのUNIQUE制約を使うことで、カラムの値の重複を防ぎ、データの整合性を保つことができます。カラム定義時に「UNIQUE」キーワードを付ける方法と、テーブル定義時に「UNIQUE(カラム名)」と指定する方法の2つがあるので、状況に応じて使い分けるとよいでしょう。
-
MySQLでビューの構造を確認する方法|DESCRIBE文の使い方を解説
MySQLにおいて、ビュー(VIEW)は仮想テーブルの一種であり、実際のテーブルを組み合わせて構成されるものです。そのため、テーブルの構造を取得するために使うクエリと同じものを、ビューに対しても使用できます。つまり、DESCRIBE文を使えば、MySQLビューの構造を簡単に確認することができます。DESCRIBE文の基本構文DESCRIBE view_name;ここで view_name には、構造を取得したいビューの名前を指定します。実行例例として、「Info」という名前のビューの構造を取得してみましょう。以下のクエリを実行します。mysql> DESCRIBE INFO; +----
-
MySQLでブール型(BOOLEAN)フィールドを追加する方法を徹底解説
MySQLには厳密な意味での「ブール型」は存在せず、BOOLやBOOLEANとして定義した場合でも、内部的にはすべてTINYINT(1)として扱われます。つまり、tinyint(1)、bool、booleanの3つは完全なシノニム(同義語)です。MySQLにおける真偽値の扱いMySQLでは、0が偽(false)、0以外の数値が真(true)として解釈されます。PHPと同様に、0以外の任意の数値もtrueとして扱われる点に注意しましょう。実務上は、可読性を高めるためにtrue/falseリテラルを使うか、規約として0と1のみを使用するのが一般的です。BOOL型カラムを持つテーブルを作成するそれで