facebook twitter hatena line email

Mysql/外部キー

提供: 初心者エンジニアの簡易メモ
2016年8月15日 (月) 18:29時点におけるAdmin (トーク | 投稿記録)による版 (親の更新、削除を子テーブルに連動させる場合)

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

外部キー設定

// 親テーブル
DROP TABLE IF EXISTS users;
CREATE TABLE users(
   id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
   name varchar(10)
) ENGINE=InnoDB;
// 子テーブル
DROP TABLE IF EXISTS contents;
CREATE TABLE contents(
   id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
   user_id int,
   FOREIGN KEY(user_id) REFERENCE users(id)
) ENGINE=InnoDB;

INSERT INTO users(name) VALUES('test1');

INSERT INTO contents(user_id) VALUES(1); // 成功
INSERT INTO contents(user_id) VALUES(4); // 失敗

外部キー追加

alter table contents 
add foreign key (user_id) references user(id)

親の更新、削除を子テーブルに連動させる場合

以下をつける

on delete cascade 
on update cascade;
CONSTRAINT `制約名` FOREIGN KEY (`子側カラム名`)
   REFERENCES `親側テーブル名` (`親側カラム名`)
   ON DELETE 削除時の動作 ON UPDATE 更新時の動作

外部キー削除

alter table users drop foreign key users_ibfk_1;