2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初心者向け】外部キーについて 

Last updated at Posted at 2020-02-01

外部キー(FOREIGN KEY)とは

関連性のあるテーブルを結びつけること

「ここの(外部キーを指定した)値は
こっち(親テーブルの値)から選んで入れるて」みたいな?

参照されるのが親テーブル
参照するのが子テーブル

#使用例

テーブル名:threads(子テーブル)参照する側

id(主キー) commented_at comment board_id(外部キー)
1 2020/1 aaa A1
2 2020/2 iii B2
3 2020/3 uuu C3
4 2020/4 eee D4

テーブル名:boards(親テーブル)参照される側

id(主キー) created_at title
A1 2020/5 AAA
B2 2020/6 III
C3 2020/7 UUU
D4 2020/8 EEE

外部キーに指定するカラム名は(参照先のテーブル名の単数形+id)
2つのテーブルを関連付けるため、threadsテーブルにboard_idを追加。
外部キーを指定することで、もうboard_idにはboardsテーブルのカラムidしか持てなくなる

#外部キー制約
「子テーブルにデータを追加するとき親テーブルに存在しない値を含むデータの追加をエラー」
「親テーブルの削除、更新時に子テーブルにその値があるとエラー」(デフォルト)

親テーブルの削除、更新の時にエラーにしたくないのなら、設定を変更可能↓

削除更新時の動作
RESTRICT エラー(デフォルト)
CASCADE 子テーブルの同じ値を削除、更新
SET NULL 子テーブルの同じ値がNULLになる
外部キー制約
CONSTRAINT `制約名` 
    FOREIGN KEY (`子カラム名`)
    REFERENCES `親テーブル名` (`親カラム名`)
    ON DELETE 削除時の動作設定 ON UPDATE 更新時の動作設定
外部キーの制約名の確認
ALTER TABLE 子テーブル名 ADD FOREIGN KEY(子カラム名) REFERENCES 子テーブル名(子カラム名);
外部キーの追加
SHOW CREATE TABLE 子テーブル名;
外部キーの削除
ALTER TABLE 子テーブル名 DROP FOREIGN KEY 外部キー制約名;

||意味|
|--:|--:|--:|
|FOREIGN KEY|外部キー制約|
|REFERENCES|どれを参照するか|
|ON DELETE|親テーブルを削除した時|
|ON UPDATE|親テーブルを更新した時|

#どんなことができるか

たとえば、
twitterで呟いたら、コメントできるけど、
呟いたこと時自体を消せばコメントも全部消えるみたいなこと?

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?