MySql 5.6.14 と MySql Workbench 6.0.7 を使用して、MySql でデータベースを構築しています。Orders テーブルと 2 つの詳細テーブルがあります。注文テーブル OrderNumber 列への外部キーを持つように 2 つの詳細テーブルを設定しようとしています。
メインの注文テーブルは次のように作成できます。
CREATE TABLE `orders` (
`PO` varchar(32) NOT NULL,
PRIMARY KEY (`OrderTotal`,`PO`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
他にも列はありますが、ここでは参照しません。
他の 2 つのテーブルは構造が似ており、基本的に次のようになります。
CREATE TABLE `orderdetail` (
`PO` varchar(32) NOT NULL,
`EnteredID` int(11) NOT NULL,
PRIMARY KEY (`PO`,`EnteredID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ただし、テーブルに外部キーを追加しようとするたびに、次のようになります。
エラー 1215: 外部キー制約を追加できません
これに続いて:
エラー: フェイルバック スクリプトの実行中にエラーが発生しました。詳細は次のとおりです。
エラー 1050: テーブル 'orderdetail' は既に存在します
私が調査したところ、エラー 1050 はここでは意味がなく、前のクエリが機能しなかったときにスローされるエラーです。他の人は、間違った DB タイプの使用、同じ名前の外部キー、大文字と小文字の問題、データ型の不一致などの問題を抱えていました。すべてのテーブルで InnoDB エンジンを使用しています。MySQL サーバーはすべて小文字で大文字と小文字を区別しないように設定されており、型は完全に一致しており、その名前の外部キーは他にありません。
ですから、いくつかの外部キーを作成するのになぜそんなに苦労しているのか、私は途方に暮れています。