2017-07-26 115 views
0

事先道歉可能是重复的帖子 - 我在其他地方找不到我确切的问题。我正在学习一门SQL课程,并使用MySQL Workbench 6.3作为我的沙箱。在我的课堂项目中,我正在创建“课程”,“教授”和“教授”表格。下面是前两个,删节:MySQL Workbench ::无法将第二个外键添加到现有表

// CREATE DATABASE `project1'... 
CREATE TABLE `courses` (`cid` int(11) NOT NULL, ...more... PRIMARY KEY (`cid`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
CREATE TABLE `professors` (`ssn` int(11) NOT NULL, ...more... PRIMARY KEY (`ssn`)) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

的 “教” 表很简单:

CREATE TABLE `teaches` (
    `cid` int(11) NOT NULL, 
    `ssn` int(11) NOT NULL, 
    PRIMARY KEY (`cid`,`ssn`), 
    KEY `ssn_idx` (`ssn`), 
    CONSTRAINT `ssn` FOREIGN KEY (`ssn`) REFERENCES `professors` (`ssn`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

上述所有SQL是成功的。但我的问题是,“教”需要第二个外键回到“课程”。我本来以为这会做到这一点:

ALTER TABLE `project1`.`teaches` 
ADD CONSTRAINT `cid` 
    FOREIGN KEY (`cid`) 
    REFERENCES `project1`.`courses` (`cid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION; 

但MySQL的讨厌:

Operation failed: There was an error while applying the SQL script to the database. 
ERROR 1022: Can't write; duplicate key in table '#sql-1060_1b' 
SQL Statement: 
ALTER TABLE `project1`.`teaches` 
ADD CONSTRAINT `cid` 
    FOREIGN KEY (`cid`) 
    REFERENCES `project1`.`courses` (`cid`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION 

我感到困惑,因为我有两个外键关系的其他表,我不打这个问题与他们。 (是的,我克隆了他们的SQL创建语句,但没有运气。)该问题被描述为“duplicate key in table '#sql-1060_1b'”,但我无法弄清楚#sql-1060-1b可能是什么表。任何指导?

+0

这是SQL Server如何? –

+0

重命名你的钥匙:) –

+0

@NorbertvanNobelen这样做!男人,有时候是最简单的事情......感谢一百万人。 :) – Pete

回答

0

感谢Norbert van Nobelen解决了这个问题 - 将“Course”属性从“cid”重命名为“mycid”取得了诀窍。