facebook twitter hatena line email

「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;
+
  DROP TABLE IF EXISTS users;
  create table users(id int not null primary key auto_increment, name varchar(10)) engine=innodb;
+
  CREATE TABLE users(
 +
    id int NOT NULL PRIMARY KEY AUTO_INCREMENT,
 +
    name varchar(10)
 +
) ENGINE=InnoDB;
 +
 
 
  // 子テーブル
 
  // 子テーブル
  drop table if exists contents;
+
  DROP TABLE IF EXISTS contents;
  create table contents(id int not null primary key auto_increment, user_id int, foreign key(user_id) references users(id)) engine=innodb;
+
  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 users(name) VALUES('test1');
 
   
 
   
  insert into contents(user_id) values(1); // 成功
+
  INSERT INTO contents(user_id) VALUES(1); // 成功
  insert into contents(user_id) values(4); // 失敗
+
  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;