MySQL:MySQL外部キー制約の概要


MySQL:MySQLの外部キー制約の概要
MySQLには、MyISAMとInnoDBの2つの一般的なエンジンタイプがあります.外部キー制約はInnoDBエンジンタイプのみでサポートされています.
一、外部キー制約の意味:1.外部キー制約サブテーブルの意味:サブテーブルにinsertまたはupdateのデータがある場合、プライマリ・テーブルに候補キーが見つからない場合は、この操作は許可されません.      2. 外部キー制約のプライマリ・テーブルへの意味:プライマリ・テーブルにinsertまたはupdateデータがある場合、プライマリ・テーブルの候補キーがサブテーブルの外部キー値に対応する場合、この操作は許可されません.二、外部キー制約の使用条件:1.両方のテーブルはInnoDBテーブルでなければなりません.テンポラリ・テーブルはありません.      2. 外部キー関係を確立する対応するカラムには、似たようなInnoDB内部データ型が必要です.      3. 外部キー関係を確立する対応するカラムには、インデックスが作成されている必要があります.三、外部キー制約の動作:サブテーブルが親テーブルに存在しない外部キー値を作成しようとすると、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は現在サポートされていません.
外部キー制約が最も多く使用されるのは、1)親テーブルの更新時に子テーブルも更新され、親テーブルの削除時に子テーブルに一致する項目がある場合は削除に失敗します.この場合,外部キー定義では,ON UPDATE CASCADE ON DELETE RESTRICTを用いる.2)親テーブルが更新されると子テーブルも更新され、親テーブルが削除されると子テーブルが一致するアイテムも削除されます.この場合、外部キー定義では、ON UPDATE CASCADE ON DELETE CASCADEを使用します.
四、外部キー制約の操作
       1. 外部キーコンストレイントの開始
SET FOREIGN_KEY_CHECKS = 1;

       2. 外部キーコンストレイントの無効化
SET FOREIGN_KEY_CHECKS = 0;

       3. 外部キーコンストレイントの作成外部キーコンストレイントの作成には、テーブルの作成時に外部キーコンストレイントを直接作成する方法と、テーブルの作成時に外部キーコンストレイントを直接作成する方法の2つがあります.テーブルの作成後に外部キーコンストレイントを追加することもできます.
create table table_name  (
	   1     1,
	   2     2,
	   3     3,
	[add constraint   name] foreign key (   ) references   (     )
);

create table table_name  (
	   1     1,
	   2     2,
	   3     3
);
alter table table_name add constraint   name foreign key (   )  references   (     );

       4.外部キーコンストレイントの削除
alter table table_name drop    name;