質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

2回答

10109閲覧

MySQL主キーと外部キーを両方設定する方法

encho

総合スコア182

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2020/02/06 10:48

#MySQL主キーと外部キーを両方設定する方法
MySQLで主キーと外部キー両方を設定するため、以下のようなテーブルを生成しました。

MySQL

1コード 2CREATE DATABASE app DEFAULT CHARACTER SET utf8; 3 4USE app; 5 6CREATE TABLE meeting_room( 7 room_id INT NOT NULL AUTO_INCREMENT, 8 room_name varchar(255) NOT NULL, 9 PRIMARY KEY(room_id) 10)ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 11 12CREATE TABLE reservable_room( 13 reserved_date date NOT NULL, 14 room_id int NOT NULL, 15 FOREIGN KEY(room_id) REFERENCES meeting_room(room_id), 16 PRIMARY KEY(reserved_date,room_id) 17)ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 18 19CREATE TABLE reservation( 20 reservation_id int NOT NULL, 21 start_time time NOT NULL, 22 end_time time NOT NULL, 23 reserved_date date NOT NULL, 24 room_id int NOT NULL, 25 user_id int NOT NULL, 26 PRIMARY KEY(reservation_id), 27 FOREIGN KEY(reserved_date) REFERENCES reservable_room(reserved_date), 28 FOREIGN KEY(room_id) REFERENCES meeting_room(room_id), 29 FOREIGN KEY(user_id) REFERENCES user(user_id) 30)ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 31 32CREATE TABLE user( 33 user_id int NOT NULL, 34 first_name varchar(255) NOT NULL, 35 last_name varchar(255) NOT NULL, 36 password varchar(255) NOT NULL, 37 role_name varchar(255) NOT NULL, 38 PRIMARY KEY(user_id) 39)ENGINE=InnoDB DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

reservable_roomテーブルのroom_IDに対して外部キーと主キーの両方を設定したいのですが、
上記のコードの通りテーブル生成を行うと、主キーのみ設定されているようです。
イメージ説明
主キーと外部キーを共に設定したい場合は
どういった方法でテーブルを生成するのが適当でしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

上記のコードの通りテーブル生成を行うと、主キーのみ設定されているようです。

単にPRIが優先されて、表示されていないだけではないでしょうか。SHOW CREATE TABLEで確認してみてください。

投稿2020/02/06 10:51

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

encho

2020/02/06 11:19

SHOW CREATE TABLEで確認したところ、共に設定ができていました。 ご回答ありがとうございました。
guest

0

MySQLのテーブル定義は
SHOW CREATE TABLE TABLE_NAME1
で載せてください。

あと、親テーブルを先にCREATE TABLE しておかないと外部キーは設定できませんからご注意を。

投稿2020/02/06 11:34

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問