MySQLテーブルに候補キー(Candidate Key)を実装する方法
候補キー(Candidate Key)とは
リレーショナルデータベースにおいて、1つのテーブル(リレーション)には1つ以上の候補キーが存在する可能性があります。その中で実際に主キーとして選択されたものが「プライマリキー(Primary Key)」です。すべての候補キーは主キーの候補となり得るため、主キーの候補となるキーを「候補キー(Candidate Key)」と呼びます。
MySQLで候補キーを実装するには、UNIQUEキー制約を活用します。複数のカラムに対してユニークキーを設定することで、それぞれのキーが候補キーとして機能します。基本的な構文は以下の通りです。
alter table テーブル名 add unique key 任意のキー名(カラム名1, カラム名2);
手順1:テーブルを作成する
まず、サンプル用のテーブルを作成します。
mysql> create table DemoTable1400
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name varchar(40),
-> Age int
-> );
Query OK, 0 rows affected (0.50 sec)手順2:UNIQUEキーを追加して候補キーを実装する
次に、ALTER TABLE文を使って「Name」と「Age」の2カラムの組み合わせにユニークキーを設定し、候補キーを実装します。
mysql> alter table DemoTable1400 add unique key name_age_unique(Name,Age); Query OK, 0 rows affected (0.67 sec) Records: 0 Duplicates: 0 Warnings: 0
手順3:レコードを挿入して動作を確認する
INSERT文でいくつかレコードを挿入し、ユニークキー制約が正しく機能しているか確認してみましょう。
mysql> insert into DemoTable1400(Name,Age) values('Chris',23);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1400(Name,Age) values('Chris',23);
ERROR 1062 (23000): Duplicate entry 'Chris-23' for key 'name_age_unique'
mysql> insert into DemoTable1400(Name,Age) values('David',23);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1400(Name,Age) values('Chris',24);
Query OK, 1 row affected (0.10 sec)ここで注目すべきポイントは、「Chris / 23」の組み合わせを再度挿入しようとした際にエラー1062(重複エントリー)が発生したことです。一方、「David / 23」や「Chris / 24」のように片方だけが同じ値であれば問題なく挿入できます。これは、2カラムの組み合わせ全体に対して一意性が保証されているためです。
手順4:登録されたデータを確認する
SELECT文でテーブル内の全レコードを表示します。
mysql> select * from DemoTable1400;
実行結果は以下の通りです。
+----+-------+------+ | Id | Name | Age | +----+-------+------+ | 1 | Chris | 23 | | 4 | Chris | 24 | | 3 | David | 23 | +----+-------+------+ 3 rows in set (0.00 sec)
まとめ
このように、MySQLではUNIQUEキー制約を追加するだけで、簡単に候補キーを実装できます。複数のカラムを組み合わせた一意制約を設定することで、データの整合性を保ちながら、主キーとは別の形でレコードの一意性を保証できるのが大きなメリットです。
-
MySQLで別テーブルの主キーを外部キーとして参照する方法をわかりやすく解説
MySQLでは、あるテーブルの主キー(PRIMARY KEY)を、別のテーブルの外部キー(FOREIGN KEY)として参照することで、テーブル間にリレーション(関連付け)を構築できます。これによりデータの整合性が保たれ、参照先に存在しない値の登録を防ぐことができます。外部キー制約を追加する基本構文既存のテーブルに対して外部キー制約を追加するには、ALTER TABLE文を使用します。基本的な構文は以下のとおりです。alter table yourSecondTableName add constraint `yourConstraintName` foreign key(`yourSecon
-
MySQLでテーブルの単一行にNULL値が含まれているか確認する方法
MySQLでテーブルの行内にNULL値が含まれているかどうかを確認するには、「IS NULL」演算子を使用します。WHERE句と組み合わせることで、特定のカラムがNULLである行を簡単に抽出できます。ここでは、実際にテーブルを作成し、NULL値を含む行を検索する手順を順番に見ていきましょう。 サンプルテーブルの作成 まず、以下のようにテーブルを作成します。 例 mysql> create table demo86 -> ( -> value1 varchar(20) -> , -> value2 varchar(20)