Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
1
Help us understand the problem. What is going on with this article?
@yuki_911

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

More than 1 year has passed since last update.

外部キー(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で呟いたら、コメントできるけど、
呟いたこと時自体を消せばコメントも全部消えるみたいなこと?

1
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
yuki_911
PHP勉強中の初心者です! ポートフォリオ作成の過程で勉強になったことや気付いたことをまとめていきます!!

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
1
Help us understand the problem. What is going on with this article?