![]() |
![]() ![]() ![]() ![]() ![]() ![]() ![]() |
|
|
外部キーとは2つのテーブルがあり、それぞれが親子関係になっているような場合、データ更新時に自動的にデータ・チェックをしてくれる機能です。 たとえば、「書籍テーブル」「著者テーブル」という2つのテーブルで考えてみます。
このような場合、「著者テーブル」は親であり、「書籍テーブル」は子になっています。 「書籍テーブル」の著者コードは、「著者テーブル」の著者コードにレコードが存在している必要があります。 しかし、実際には「著者テーブル」に存在しない著者コードを「書籍テーブル」にレコード追加できてしまいます。 外部キー制約を利用すると、こういった「親にないレコードを子供に追加」することや「子供が存在するのに親のレコードを削除」するなど、本来は有り得ないデータ変更をMySQLサーバが自動チェックしてくれるようになります。 外部キー制約の作成上記の例では、次のようにして外部キー制約を設定できます。 外部キーを作成する場合、子供側にキーが必要なので、まずキーを作ります。 外部キーを作ります。 これで外部キー制約が設定されています。 さて、ここで外部キー制約が働くかみてみましょう。 次のようにして親のテーブルである著者テーブルにデータを追加すると、子供の書籍テーブルにはデータを追加できるようになります。 外部キー利用時の注意点外部キーを設定すると、データの自動チェックがされるようになるので便利ですが、mysqldumpでバックアップするようなときに困ります。 mysqldumpでバックアップしたデータを復元するとき、外部キー制約に引っかかってエラーになります。 だから、外部キーを設定する場合には単純なmysqldumpを使うのではなく、テーブル別にバックアップするなど、何らかのスクリプトが必要だと思います。 |
| Copyright©2001-2008 釣ったよ! All Right Reserved. sg@tsuttayo.sytes.net |