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

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

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

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

Q&A

解決済

1回答

2367閲覧

主キーと外部キーを連携させたい

ypk

総合スコア80

MySQL

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

0グッド

0クリップ

投稿2020/05/26 01:31

編集2020/05/26 02:11

初めまして。
現在MySQLを勉強しているものです。

2つの表を主キーと外部キーを用いて連携させることを試みているのですがエラーになってしまいます。もし何か、気になる箇所などございましたらご教授いただけたら幸いです。
どうぞよろしくお願いいたします。

#実現したいこと

下記2つの表を「店舗名」を介して連携させたい。

MySQL

1CREATE TABLE table2.checker 2( 3 No INT NOT NULL, 4 店舗名 TEXT, 5 日時 TEXT, 6 担当者 TEXT, 7 お客様ポイント INT, 8 支払方法 TEXT, 9 CONSTRAINT PRIMARY KEY (No) 10); 11

MySQL

1CREATE TABLE table2.sale 2( 3 店舗名 VARCHAR(14), 4 住所 VARCHAR(30), 5 TEL  VARCHAR(13), 6 7 CONSTRAINT PRIMARY KEY (店舗名) 8); 9

上記2つの表を

ALTER TABLE checker ADD FOREIGN KEY(店舗名) REFERENCES sale(店舗名);

を用いて連携させようとしたのですがエラーが発生してしまいます。
エラーメッセージは以下の通りです。

Cannot add foreign key constraint

参考にした記事:https://www.sejuku.net/blog/54072#i-6

イメージ説明

イメージ説明

#エラーメッセージ

FOREIGN KEY(?X???) REFERENCES checker(?X???):

Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition.

checkerにある「店舗名」をsaleにある「店舗名」の外部キーとし連携させようとしています。
もし何か、気になる箇所などございましたらご教授いただけたら幸いです。どうぞよろしくお願いいたします。

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

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

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

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

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

sazi

2020/05/26 02:05

どんなエラーですか? 既にデータが入っている場合は、そのデータの整合性はとられていますか?
ypk

2020/05/26 02:13

>Cannot add foreign key constraint というエラーが発生します。 データの整合性について。データの整合性とは具体的にどのようなことでしょうか。申し訳ございませんが、ご教授いただけたら幸いです。どうぞよろしくお願いいたします。
sazi

2020/05/26 02:21 編集

例えば、checkerの店舗名には必ずsaleの何れかの値が入っていなければならず、空は許されません。
ypk

2020/05/26 03:05

そういうことなのですね。それでしたら整合性は取れていました。教えてくださり、ありがとうございます
guest

回答1

0

ベストアンサー

子テーブルの対象カラムと親テーブルの対象カラムは同じデータ型である必要があります。
text ←→ VARCHAR(14)
なのでデータ型が違うからです。

投稿2020/05/26 02:19

編集2020/05/26 02:19
sazi

総合スコア25195

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

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

ypk

2020/05/26 03:06

ありがとうございます。いただいたご指摘をもとに実行してみた結果、無事に実行することができました。 USE table2; ALTER TABLE checker ADD FOREIGN KEY(店舗名) REFERENCES sale(店舗名); でtable2のcheckerにある「店舗名」とsaleにある「店舗名」を関連付けられる (注意:関連付けるときにはカラムの「名前」と「型・サイズ」まで統一させること) を肝に銘じてデータベースを扱います。ありがとうございました。
sazi

2020/05/26 04:02

名前は別に違っていても大丈夫ですけど、意味が同じなら同じ名前である方が良いかと思います。
ypk

2020/05/26 04:42

承知いたしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問