🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

12647閲覧

外部キー制約をうまく設定できない

masaking

総合スコア30

MySQL Workbench

MySQL Workbenchは、オープンソースのデータベースモデリングツールです。ビジュアルなデータベース設計・SQL開発・サーバー設定・ユーザー管理・バックアップといった様々な管理ツールを備えます。

MySQL

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/09/06 07:21

編集2019/09/09 05:41

Mysql workbench のER図作成から、テーブルを起こそうとしています。
エラーが出ました。

発生している問題・エラーメッセージ

ERROR: Error 1822: Failed to add the foreign key constraint. Missing index for constraint 'software' in the referenced table 'licence'

SQL

1CREATE TABLE IF NOT EXISTS `licemce_M`.`Licence` ( 2 `licence_id` VARCHAR(45) NULL, 3 `software` VARCHAR(45) NULL, 4 `contract_no` VARCHAR(45) NULL, 5 `expire_date` VARCHAR(45) NULL, 6 `purchase_date` VARCHAR(45) NULL, 7 `reseller` VARCHAR(45) NULL, 8 `numbers` INT NULL, 9 PRIMARY KEY (`licence_id`, `software`)) 10ENGINE = InnoDB; 11 12CREATE TABLE IF NOT EXISTS `licemce_M`.`version` ( 13 `product_key` VARCHAR(45) NOT NULL, 14 `version` VARCHAR(45) NULL, 15 `licence_id` VARCHAR(45) NULL, 16 `software` VARCHAR(45) NULL, 17 PRIMARY KEY (`product_key`), 18 UNIQUE INDEX `product_key_UNIQUE` (`product_key` ASC) VISIBLE, 19 INDEX `licence_id_idx` (`licence_id` ASC) VISIBLE, 20 INDEX `software_idx` (`software` ASC) VISIBLE, 21 CONSTRAINT `licence_id` 22 FOREIGN KEY (`licence_id`) 23 REFERENCES `licemce_M`.`Licence` (`licence_id`) 24 ON DELETE NO ACTION 25 ON UPDATE NO ACTION, 26 CONSTRAINT `software` 27 FOREIGN KEY (`software`) 28 REFERENCES `licemce_M`.`Licence` (`software`) 29 ON DELETE NO ACTION 30 ON UPDATE NO ACTION) 31ENGINE = InnoDB;

試したこと

ここに問題に対して試したことを記載してください。

My workbench

ここにより詳細な情報を記載してください。

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

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

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

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

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

m.ts10806

2019/09/06 07:24

SQLも一応コードですのでマークダウンのcode機能にてご提示ください。 でないと既に見てお分かりのようにマークダウンの別の機能が働いて読みづらくなってしまっています。
yambejp

2019/09/06 07:29

バージョンが関わっているかもしれないので、失敗した方の mysqlのバージョンを提示してください
masaking

2019/09/09 05:46

Server version: 8.0.17 MySQL Community Server - GPL とありました
masaking

2019/09/09 05:46 編集

code 機能にて書き直しました
guest

回答2

0

ベストアンサー

SQL

1CONSTRAINT licence_id 2FOREIGN KEY (licence_id) 3REFERENCES licemce_M.Licence (licence_id) 4ON DELETE NO ACTION 5ON UPDATE NO ACTION, 6CONSTRAINT software 7FOREIGN KEY (software) 8REFERENCES licemce_M.Licence (software) 9ON DELETE NO ACTION 10ON UPDATE NO ACTION 11 1213 14CONSTRAINT licence_id_software_fk 15FOREIGN KEY (licence_id, software) 16REFERENCES licemce_M.Licence (licence_id, software) 17ON DELETE NO ACTION 18ON UPDATE NO ACTION

投稿2019/09/07 21:36

Orlofsky

総合スコア16417

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

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

masaking

2019/09/09 07:02 編集

CREATE TABLE IF NOT EXISTS `licemce_M`.`version` ( `product_key` VARCHAR(45) NOT NULL, `version` VARCHAR(45) NULL, `licence_id` VARCHAR(45) NULL, `software` VARCHAR(45) NULL, PRIMARY KEY (`product_key`), UNIQUE INDEX `product_key_UNIQUE` (`product_key` ASC) VISIBLE, INDEX `licence_id_idx` (`licence_id` ASC) VISIBLE, INDEX `software_idx` (`software` ASC) VISIBLE, CONSTRAINT `licence_id_software_fk` FOREIGN KEY (`licence_id`,'software') REFERENCES `licemce_M`.`Licence` (`licence_id`,'software') ON DELETE NO ACTION ON UPDATE NO ACTION ) という風に変更したところ、ERROR: Error 1064: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''software') REFERENCES `licemce_M`.`Licence` (`licence_id`,'software') O' at line 14 とエラーが出ました。’’の使い方などがダメなのでしょうか。。。
Orlofsky

2019/09/09 07:05 編集

>FOREIGN KEY (`licence_id`,'software') >REFERENCES `licemce_M`.`Licence` (`licence_id`,'software') バックスラッシュではなく、シングルクォートで囲んでいるからでは?
masaking

2019/09/09 07:06

すいません自己解決しました。 やはり、’’の使い方がダメだったみたいです。 全部外したら通りました。 プログラミン後初心者なのですけど、こういう細かいところにまで気を使わないといけないのですね。 勉強になりました。 ありがとうございます。 うれしいです。
wintus

2020/12/08 10:16

> バックスラッシュ 「`」はバッククォートですね。バックスラッシュは「\」のことです。 https://wa3.i-3-i.info/word11728.html 実際こういう細かい記号は間違いやすいと思います。
Orlofsky

2020/12/08 12:55

wintusさん、ご指摘ありがとうございます。
guest

0

foreign key として licence_id と software の「組」を使いたいのですよね?

であれば、記述は

SQL

1FOREIGN KEY (fk_licence) 2REFERENCES licemce_M.Licence (licence_id, software) 3ON DELETE NO ACTION 4ON UPDATE NO ACTION,

のようにしなくてはいけません。

投稿2019/09/06 08:00

tacsheaven

総合スコア13703

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問