MySQL外部キーの簡単な学習チュートリアルについて
2462 ワード
MySQLでは、InnoDBエンジンタイプのテーブルが外部キー制約をサポートしています.外部キーの使用条件:1.2つのテーブルはInnoDBテーブルでなければならず、MyISAMテーブルは一時的に外部キーをサポートしない(今後のバージョンではサポートされる可能性があると言われているが、少なくとも現在はサポートされていない).2.外部キー列にインデックスを作成する必要があります.MySQL 4.1.2以降のバージョンでは、外部キーの作成時にインデックスが自動的に作成されますが、以前のバージョンでは作成を表示する必要があります.3.外部キー関係の2つのテーブルの列は、データ型が似ている必要があります.つまり、intとtinyintなどのタイプの列を相互に変換することができますが、intとcharはできません.外部キーの利点:2つのテーブルを関連付け、データの一貫性を保証し、いくつかのカスケード操作を実現することができます.外部キーの定義構文:コードは次のとおりです.
この構文はCREATE TABLEとALTER TABLEで使用できます.CONTRAINT symbolを指定しないと、MYSQLは自動的に名前を生成します.ON DELETE、ON UPDATEはイベントトリガ制限を表し、パラメータを設定することができる: RESTRICT(外部キーの変更を制限) CASCADE(外部キーの変更に従う) SET NULL(NULL設定) SET DEFAULT(デフォルト設定) NO ACTION(動作なし、デフォルト) 子テーブルが親テーブルに存在しない外部キー値を作成しようとすると、InnoDBはINSERTまたはUPDATE操作を拒否します.親テーブルがUPDATEまたはDELETEのいずれかのサブテーブルに存在または一致する外部キー値をしようとする場合、最終的な動作は、外部キー制約定義のON UPDATEおよびON DELETEオプションに依存します.InnoDBは5種類の異なる動作をサポートしているが、ON DELETEまたはON UPDATEが指定されていない場合、デフォルトの動作はRESTRICTである.
1. CASCADE:親テーブルから対応するローを削除または更新し、テーブルから一致するローを自動的に削除または更新します.ON DELETE CANSCADEとON UPDATE CANSCADEの両方がInnoDBでサポートされています.
2. SET NULL:親テーブルから対応するローを削除または更新し、サブテーブルの外部キー列を空にします.なお、これらは、外部キー列がNOT NULLに設定されていない場合にのみ有効である.ON DELETE SET NULLおよびON UPDATE SET NULLは、いずれもInnoDBによってサポートされています.
3. NO ACTION:InnoDBは親テーブルの削除または更新を拒否します.
4. RESTRICT:親テーブルの削除または更新を拒否します.RESTRICT(またはNO ACTION)を指定するのと、ON DELETEまたはON UPDATEオプションを無視するのと同じ効果です.
5. SET DEFAULT:InnoDBは現在サポートされていません.
外部キーコンストレイントで最も多く使用されるのは、次の2つです.
1)親テーブルの更新時に子テーブルも更新され、親テーブルの削除時に子テーブルに一致する項目がある場合、削除に失敗します.
2)親テーブルが更新されると子テーブルも更新され、親テーブルが削除されると子テーブルが一致するアイテムも削除されます.
前の場合、外部キー定義では、ON UPDATE CASCADE ON DELETE RESTRICTを使用します.後者の場合、ON UPDATE CASCADE ON DELETE CASCADEを使用できます.
InnoDBでは、ALTER TABLEを使用して既存のテーブルに新しい外部キーを追加できます.
InnoDBでは、ALTER TABLEを使用して外部キーを削除することもサポートされています:ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, …)
REFERENCES tbl_name (index_col_name, …)
[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]
この構文はCREATE TABLEとALTER TABLEで使用できます.CONTRAINT symbolを指定しないと、MYSQLは自動的に名前を生成します.ON DELETE、ON UPDATEはイベントトリガ制限を表し、パラメータを設定することができる:
1. CASCADE:親テーブルから対応するローを削除または更新し、テーブルから一致するローを自動的に削除または更新します.ON DELETE CANSCADEとON UPDATE CANSCADEの両方がInnoDBでサポートされています.
2. SET NULL:親テーブルから対応するローを削除または更新し、サブテーブルの外部キー列を空にします.なお、これらは、外部キー列がNOT NULLに設定されていない場合にのみ有効である.ON DELETE SET NULLおよびON UPDATE SET NULLは、いずれもInnoDBによってサポートされています.
3. NO ACTION:InnoDBは親テーブルの削除または更新を拒否します.
4. RESTRICT:親テーブルの削除または更新を拒否します.RESTRICT(またはNO ACTION)を指定するのと、ON DELETEまたはON UPDATEオプションを無視するのと同じ効果です.
5. SET DEFAULT:InnoDBは現在サポートされていません.
外部キーコンストレイントで最も多く使用されるのは、次の2つです.
1)親テーブルの更新時に子テーブルも更新され、親テーブルの削除時に子テーブルに一致する項目がある場合、削除に失敗します.
2)親テーブルが更新されると子テーブルも更新され、親テーブルが削除されると子テーブルが一致するアイテムも削除されます.
前の場合、外部キー定義では、ON UPDATE CASCADE ON DELETE RESTRICTを使用します.後者の場合、ON UPDATE CASCADE ON DELETE CASCADEを使用できます.
InnoDBでは、ALTER TABLEを使用して既存のテーブルに新しい外部キーを追加できます.
ALTER TABLE tbl_name
ADD [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name, ...)
REFERENCES tbl_name (index_col_name,...)
[ON DELETE reference_option]
[ON UPDATE reference_option]
InnoDBでは、ALTER TABLEを使用して外部キーを削除することもサポートされています:ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;