MySQL:MySQL外部キー制約の概要
2244 ワード
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. 外部キーコンストレイントの開始
2. 外部キーコンストレイントの無効化
3. 外部キーコンストレイントの作成外部キーコンストレイントの作成には、テーブルの作成時に外部キーコンストレイントを直接作成する方法と、テーブルの作成時に外部キーコンストレイントを直接作成する方法の2つがあります.テーブルの作成後に外部キーコンストレイントを追加することもできます.
4.外部キーコンストレイントの削除
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;