【发布时间】:2015-06-03 16:38:41
【问题描述】:
我有一个包含两个外键(来自 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
【问题讨论】:
-
你能分享你完整的ddl吗?
-
请显示所有 3 个相关表的创建表语句。
-
这些创建语句在SQL Fiddle 上运行良好。尝试使用不同的约束名称(更改
z-prof-dist_ibfk_1)我前段时间有一些非常相似的东西......
标签: mysql foreign-key-relationship junction-table