Userテーブルのidを参照してPostテーブルのuser_idを外部キーに設定する場合
CREATE TABLE IF NOT EXISTS `db`.`User` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`email` varchar(255) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
`deleted_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`))
CREATE TABLE IF NOT EXISTS `db`.`Post` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`deleted_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
,FOREIGN KEY fk_user_id(user_id) REFERENCES User(id)) //この一文
↑の最後の行が当該文。
FOREIGN KEY 外部キー名(参照元カラム名) REFERENCES 参照先テーブル名(参照先カラム名)
外部キー設定するとできること
https://www.dbonline.jp/mysql/table/index11.html#section3
値の整合性を担保するために、親テーブルの参照元のカラムの値を更新、削除するとエラーが発生する。
エラーの振る舞いも設定することができる
RESTRICT
親テーブルに対して削除または更新を行うとエラーとなります。設定を省略した場合は RESTRICT を設定したのと同じです。
CASCADE
親テーブルに対して削除または更新を行うと、子テーブルで同じ値を持つカラムのデータに対して削除または更新を行います。
SET NULL
親テーブルに対して削除または更新を行うと、子テーブルの同じ値を持つカラムの値が NULL になります。
NO ACTION
親テーブルに対して削除または更新を行うとエラーとなります。 RESTRICT を設定した場合と同じです。
SET DEFAULT
現在この設定を行うとテーブルの作成が行えません。