1

2 つの外部キー (Profiles テーブルと Districts テーブルから) を含むジャンクション テーブルがあり、両方の列が複合主キーになっています。

  `profID` int(11) NOT NULL,
  `distID` varchar(8) NOT NULL,
  PRIMARY KEY (`profID`,`distID`)

両方の列を制約したいのですが、MySql がエラーをスローします。

    #1050 - Table './database_name/z@002dprof@002ddist' already exists 

問題のトラブルシューティングで、別の重複するジャンクション テーブルを最初から作成しようとしましたが、同じエラーが発生します。奇妙なことに、MySQL ではどちらか一方の列を制約することはできますが、両方の列を制約することはできません。複数の外部キー列に制約がある他の (ジャンクション以外の) テーブルがあるため、困惑しています。

ちなみに私はphpMyAdminを使っており、テーブルはすべてutf-8のInnoDBです。

どんな助けでも大歓迎です。

追加: CREATE TABLE の結果を表示

CREATE TABLE `Profiles` (
 `profID` int(11) NOT NULL AUTO_INCREMENT,
 `email` varchar(64) NOT NULL,
 `stID` varchar(2) NOT NULL,
 `zip` varchar(5) NOT NULL,
 PRIMARY KEY (`profID`),
 KEY `stID` (`stID`,`zip`),
 KEY `email` (`email`)
) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8

CREATE TABLE `Districts` (
 `distID` varchar(8) NOT NULL,
 `stID` varchar(2) NOT NULL,
 `abbrev` varchar(16) NOT NULL,
 PRIMARY KEY (`distID`),
 KEY `stID` (`stID`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TABLE `z-prof-dist` (
 `profID` int(11) NOT NULL,
 `distID` varchar(8) NOT NULL,
 PRIMARY KEY (`profID`,`distID`),
 KEY `distID` (`distID`),
 KEY `profID` (`profID`),
 CONSTRAINT `z-prof-dist_ibfk_1` FOREIGN KEY (`distID`) REFERENCES `Districts` (`distID`) 
    ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
4

1 に答える 1