Mysql外部キーの追加

2531 ワード

構文:alter tableテーブル名add constraint FK_ID foreign key(外部キーフィールド名)REFERENCES外部テーブル名(対応するテーブルのプライマリキーフィールド名);例:alter table tb_active add constraint FK_ID foreign key(user_id) REFERENCES tb_user(id)//FK_IDは外部キーの名称/CREATE TABLE tb_active(id int(11)NOT NULL AUTO_INCREMENT, title varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, content text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, user_id int(11) NOT NULL, PRIMARY KEY ( id ), KEY user_id ( user_id ), KEY user_id_2 ( user_id ), CONSTRAINT FK_ID FOREIGN KEY ( user_id ) REFERENCES tb_user ( id )) ENGINE=InnoDB DEFAULT CHARSET=latin1/
削除外部キー構文:ALTER TABLE table-name DROP FOREIGN KEY key-id;例:ALTER TABLE tb_active DROP FOREGN KEY FK_ID自動キーの更新と削除:外部キーは、新しく挿入されたレコードの完全性を保証しますが、REFERENCESで文から名前が付けられたテーブルからレコードを削除するとどうなりますか?同じ値を外部キーとして使用する補助テーブルで何が起こりますか?
明らかに、それらのレコードも削除されるべきで、さもなくばデータベースの中で多くの意味のない孤立したレコードがあって、MYSQLはFOREGN KEYに...REFERENCES修飾子は、孤立したタスクをデータベースがどのように処理するかを示すON DELETEまたはON UPDATE句簡略化タスクを追加します.
キーワードの意味CASCADE削除削除削除削除キー値と参照関係がある全てのレコードSET NULL修正削除キー値と参照関係がある全てのレコードを含み、NULL値置換(NOT NULLと表記されたフィールドのみ)RESTRICTを使用して削除要求を拒否し、削除キー値を使用した補助テーブルが手動で削除されるまで、そして参照していない場合(これはデフォルト設定であり、最も安全な設定でもある)NO ACTIONは何もしない
ON UPDATEとON DELETEルールにより、MYSQLを設定することで自動操作が可能になった場合、キーの関係が設定されていないと、深刻なデータ破壊を招く可能性があります.例えば、一連のテーブルが外部キー関係とON DELETE CASCADEルールで接続されている場合、いずれのプライマリ・テーブルの変化も、元の削除に関連するレコードのみが警告なしに削除されるため、操作前にこれらのルールをチェックし、操作後に再度チェックします.
外部キーalter table locstock add foreign key locstock_を追加ibfk 2(stockid)references product(stockid)locstockはテーブル名、locstock_ibfk 2は外部キー名最初の括弧に外部キー列名を記入し、productは表名、2番目の括弧に外部キー関連の列名を書く
外部キーalter table locstock drop foreign key locstock_を削除ibfk2
テーブルの外部キーshow create table locstockの表示
[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...) REFERENCES tbl_name (index_col_name, ...) [ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION}] [ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION}]
すべてのtablesはInnoDB型でなければなりません.一時テーブルではありません.参照テーブルには、外部キー列が同じ順序で最初の列としてリストされるインデックスが必要です.このようなインデックスが存在しない場合は、参照テーブルに自動的に作成される必要があります.参照テーブルには、最初のカラムとして同じ順序で参照されるインデックスが必要です.外部キー列のインデックス接頭辞はサポートされていません.このような結果の1つは、BLOB列とTEXT列が外部キーに含まれないことであり、これらの列のインデックスには常にプレフィックス長が含まれなければならないからである.CONTRAINTsymbolが与えられている場合は、データベース内で一意である必要があります.与えられていない場合、InnoDBは自動的にこの名前を作成します.