不能约束两个连接表列

时间:2015-06-03 16:38:41

标签: mysql foreign-key-relationship junction-table

我有一个包含两个外键的juction表(来自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将允许我约束一列或另一列,但不是两列。我很难过,因为我有其他(非联结)表,这些表对多个foriegn键列有约束。

顺便说一下,我使用phpMyAdmin,所有表都是带有utf-8的InnoDB。

任何帮助都将不胜感激。

ADDED:SHOW CREATE TABLE results

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

1 个答案:

答案 0 :(得分:0)

我想我找到了解决办法。我没有使用phpMyAdmin函数来添加约束(我不断收到错误消息),而是使用SQL ALTER TABLE查询(带有新的约束名称)来遵循marekful的主导:

ALTER TABLE `z-prof-dist` 
ADD CONSTRAINT `test1` 
  FOREIGN KEY (`profID`) REFERENCES `Profiles` (`profID`) 
ON UPDATE CASCADE

我仍然不了解原始错误的原因,但我可以看到新添加的外键约束工作正常。