【これだけ】MySQLのキー【現役エンジニアが解説】
今回は、MySQLのキーについて、プライマリキー(主キー)とユニークキーに分け、簡単に解説していきます。
プライマリキー(主キー)
プライマリキー(主キーとも呼ばれる)は、テーブル上でそのカラムの値を一意とする場合に設定します。
例えば、ユーザテーブルではユーザID、社員テーブルでは社員番号等、特定のレコードを指し示すカラムを作る際に設定をします。
CREATE TABLE users( user_id INT NOT NULL AUTO_INCREMENT, user_cd VARCHAR(5) NOT NULL, user_name VARCHAR(50) NOT NULL, PRIMARY KEY (user_id) );
MySQLでプライマリキーを設定する場合は、CREATE TABLE文でPRIMARY KEYを明示する必要があります。
上記のSQL文のように明記することで、user_idのカラムの値には重複が起こらず、必ずテーブル上で一意に定まることになります。
ユニークキー
ユニークキーも、プライマリキーと同様に、設定したカラムの値がテーブル上で重複しないようにさせるための設定となります。
ただ、プライマリキーはそのテーブルの中でレコードを特定する主たるキーであるのに対し、ユニークキーは単純に重複を許さないという目的のキー設定に過ぎません。
CREATE TABLE users( user_id INT NOT NULL AUTO_INCREMENT, user_cd VARCHAR(5) NOT NULL, user_name VARCHAR(50) NOT NULL, PRIMARY KEY (user_id), UNIQUE KEY (user_cd) );
MySQLでユニークキーを設定する場合は、CREATE TABLE文の中でプライマリキーと同様の仕方で設定をすれば良いだけです。
外部キー
キーと言えば、大体の場合はプライマリキーとユニークキーの二つを押さえておけば十分です。
この記事では、外部キーというものに関しても、おまけ程度に解説をしますが、初学者の方はスキップして頂いて差支えありません。
例えば、マスタのテーブルのキーのカラムを、非マスタのテーブルに持たせるという場合には、その二つを連動させたいというケースが出てくることがあります。
このような場合には、外部キーというものを設定することにより、非マスタの子テーブルでキーが残っている状態では、マスタから対象のキーレコードを削除できないようにするといったことができます。
CREATE TABLE posts( posts_id INT NOT NULL AUTO_INCREMENT, title VARCHAR(50) NOT NULL, body TEXT NOT NULL, user_id INT NOT NULL, INDEX user_id_index(user_id), FOREIGN KEY fk_user_id(user_id) REFERENCES users(user_id) );
外部キーを設定する際は少し複雑で、上記のように非マスタの方の子テーブルでインデックスを設定する必要があります。
ここでは、先程作成したusersテーブルをマスタの親テーブルとして、子テーブルのpostsテーブルというものを作り、親テーブルのuser_idカラムを外部キーに設定しています。
INDEXの後ろには任意のインデックス名を付け、その括弧の中には外部キーに設定する子テーブル側のカラム名を入れ、FOREIGN KEYの後ろには外部キー名と括弧内に外部キーに設定する子テーブルのカラム名を入れています。
最後のREFERENCESの後ろには親テーブルの名前を書き、その括弧内には外部キーに設定する親テーブル側のカラム名を入れることで、外部キーによるテーブルの親子関係を設定し、削除等の面で外部キー制約をかけることができます。