MySQL 主キー(PRIMARY KEY)、外部キー(FOREIGN KEY)について

●主キー(PRIMARY KEY)
プライマリキー
プライマリキーとはレコードを1行ずつ識別するためのフィールドで、プライマリキーは必ずユニークな値となる。プライマリキーの指定により、膨大なデータから必要なレコードだけを確実に取り出すことが可能。

>primary key 主キー制約(unique & not null)
>主キーはテーブル毎にひとつだけ設定できます。ここで主キーを設定する列にはNOT NULL制約が必要です。
>text型とBLOB型の列は、そのままでは主キーに含めることが出来ません。その列の先頭から何バイトを主キーとするか、明示的に指定してください。
MySQL 全機能 リファレンス」P269

なるほど!!

●外部キー(FOREIGN KEY)
外部キー(Foreign Key)
テーブルのプライマリキーと同じ値を持った別のテーブルのフィールド値。

>バージョン3.23.43から外部キー(FOREIGN KEY)制約がサポートされました。このとき、外部キー制約を設定するテーブルと被参照テーブルは、InnoDBテーブル型でなければなりません。また、被参照テーブルと被参照列には、一意性(UNIQUE)制約、インデックス(INDEX)、主キー(PRIMARY KEY)のいずれかが設定されていなければなりません。

なるほどーー!

>外部キー制約を持つ参照元テーブルにデータを挿入しようとすると、その値が被参照テーブルの被参照列に存在するか否かを検査し、存在するときのみデータを挿入します。
MySQL 全機能 リファレンス」P272

なるほど!!外部キーにはこんな役目があるんだ!!

>では、データ挿入後に(被参照テーブルの)被参照列の値を更新したり削除したい場合はどうなるのでしょうか。デフォルト動作では、更新や削除をしようとするとエラーとなり、参照元テーブルと被参照テーブル間のデータ整合性を保ちます。
>しかし、他のテーブルから参照されたばかりに、被参照テーブルの更新や削除ができなくなるのは不便です。この状況への対処法は、(外部キー制約を設定した)参照元のテーブルにON DELETE句とON UPDATE句を設定し、被参照テーブルでの更新や削除が行われた場合の動作(action)を指定することです。

>例えば、動作として”CASCADE”を指定すると、(被参照テーブルの)被参照列の値が更新された場合は、参照もとの列にも更新が反映され、削除された場合は、参照元のテーブルも削除されます。
>動作として"SET NULL"を指定すると、(被参照テーブルの)被参照列の値が更新や削除された場合に、参照もとの列に"NULL"が設定されます。同様に、"SET DEFAULT"の場合は、デフォルト値が設定されます。

なーるほどー!