「Mysql/外部キー」の版間の差分
提供: 初心者エンジニアの簡易メモ
(ページの作成:「==外部キー設定== // 親テーブル drop table if exists users; create table users(id int not null primary key auto_increment, name varchar(10)) engine=innodb;...」) |
(→親の更新、削除を子テーブルに連動させる場合) |
||
| (同じ利用者による、間の6版が非表示) | |||
| 行1: | 行1: | ||
==外部キー設定== | ==外部キー設定== | ||
// 親テーブル | // 親テーブル | ||
| − | + | 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; | ||
2016年8月15日 (月) 18:29時点における最新版
外部キー設定
// 親テーブル 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;
