外部キーとは?
カラムに FOREIGN KEY 制約(外部キー制約)を設定することで、対象のカラムに格納できる値を他のテーブルに格納されている値だけに限定することができます。
DBOnlineさん
なるほど、こういうことっすな。
FOREIGN KEY 制約を設定は子テーブル側で行います。
なるほど。ヒトカゲのほうで。
親テーブルの更新と削除を行った時にどうするのか
についても、更新・削除で、それぞれ設定できる。
すでに存在しているテーブルへの追加の仕方(ALTER)
すでに存在しているテーブルへの追加
ALTER TABLE 子テーブル名 ADD FOREIGN KEY(子の列名) REFERENCES 親テーブル名(親の列名)
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]
ALTER TABLE テーブル名 ADD FOREIGN KEY 外部キー名(参照元カラム名) REFERENCES 参照先テーブル名(参照先カラム名);
これは外部キー名を自分で名付ける場合ですな。
外部キー名は指定しない場合は、「テーブル名」_ibfk_[n] ([n]は通番)となります。ちなみにibfkは「InnoDB Foreign key」らしいです。
追加しようとしたら失敗した。
原因は親テーブルに主キーが設定されてないことだった。
外部キー確認
以下のコマンドで確認できる。
SHOW CREATE TABLE table_name;
外部キー削除
ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol;
コメント