MySQL外部キーの簡単な学習チュートリアルについて

2462 ワード

MySQLでは、InnoDBエンジンタイプのテーブルが外部キー制約をサポートしています.外部キーの使用条件:1.2つのテーブルはInnoDBテーブルでなければならず、MyISAMテーブルは一時的に外部キーをサポートしない(今後のバージョンではサポートされる可能性があると言われているが、少なくとも現在はサポートされていない).2.外部キー列にインデックスを作成する必要があります.MySQL 4.1.2以降のバージョンでは、外部キーの作成時にインデックスが自動的に作成されますが、以前のバージョンでは作成を表示する必要があります.3.外部キー関係の2つのテーブルの列は、データ型が似ている必要があります.つまり、intとtinyintなどのタイプの列を相互に変換することができますが、intとcharはできません.外部キーの利点:2つのテーブルを関連付け、データの一貫性を保証し、いくつかのカスケード操作を実現することができます.外部キーの定義構文:コードは次のとおりです.

[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はイベントトリガ制限を表し、パラメータを設定することができる:
  • 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を使用して既存のテーブルに新しい外部キーを追加できます.
    
    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;