无法约束两个交汇点 Table 列
Can't Constrain Both Junction Table Columns
我有一个 junction table,它包含两个外键(来自 Profiles 和 Districts tables),两列都是复合主键。
`profID` int(11) NOT NULL,
`distID` varchar(8) NOT NULL,
PRIMARY KEY (`profID`,`distID`)
我想限制两列,但 MySql 抛出错误:
#1050 - Table './database_name/z@002dprof@002ddist' already exists
在解决问题时,我尝试从头开始创建另一个重复的交汇点 table,但我遇到了同样的错误。奇怪的是,MySQL 将允许我限制一列或另一列,但不能限制两列。我很难过,因为我有其他(非连接)tables 对多个外键列有限制。
顺便说一下,我使用的是 phpMyAdmin,所有 table 都是带有 utf-8 的 InnoDB。
如有任何帮助,我们将不胜感激。
已添加:显示创建 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
我想我找到了解决方法。我没有使用 phpMyAdmin 函数添加约束(我一直收到错误消息),而是跟随 marekful 的领导,使用 SQL ALTER TABLE 查询(使用新的约束名称),如下所示:
ALTER TABLE `z-prof-dist`
ADD CONSTRAINT `test1`
FOREIGN KEY (`profID`) REFERENCES `Profiles` (`profID`)
ON UPDATE CASCADE
我仍然不明白原来错误的原因,但我可以看到新添加的外键约束完美运行。
我有一个 junction table,它包含两个外键(来自 Profiles 和 Districts tables),两列都是复合主键。
`profID` int(11) NOT NULL,
`distID` varchar(8) NOT NULL,
PRIMARY KEY (`profID`,`distID`)
我想限制两列,但 MySql 抛出错误:
#1050 - Table './database_name/z@002dprof@002ddist' already exists
在解决问题时,我尝试从头开始创建另一个重复的交汇点 table,但我遇到了同样的错误。奇怪的是,MySQL 将允许我限制一列或另一列,但不能限制两列。我很难过,因为我有其他(非连接)tables 对多个外键列有限制。
顺便说一下,我使用的是 phpMyAdmin,所有 table 都是带有 utf-8 的 InnoDB。
如有任何帮助,我们将不胜感激。
已添加:显示创建 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
我想我找到了解决方法。我没有使用 phpMyAdmin 函数添加约束(我一直收到错误消息),而是跟随 marekful 的领导,使用 SQL ALTER TABLE 查询(使用新的约束名称),如下所示:
ALTER TABLE `z-prof-dist`
ADD CONSTRAINT `test1`
FOREIGN KEY (`profID`) REFERENCES `Profiles` (`profID`)
ON UPDATE CASCADE
我仍然不明白原来错误的原因,但我可以看到新添加的外键约束完美运行。