• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

navicat mysql中,引用属性组作为外键,其中一个无法引用解决思路

mysql 搞代码 7年前 (2018-06-02) 152次浏览 已收录 0个评论

navicat mysql中,引用属性组作为外键,其中一个无法引用
引用另一个表中的属性组(主码)作为外键,一个正常,另一个无法添加外键,这是为什么?
这个问题纠结了两天了……为什么为什么为什么?????????

SQL code

  CREATE TABLE `match` (   `matchNO` varchar(50) NOT NULL,   `place` varchar(50) NOT NULL,   `matchGoals` int(11) DEFAULT NULL,    PRIMARY KEY (`matchNO`,`place`) ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;  

欢迎大家阅读《navicat mysql中,引用属性组作为外键,其中一个无法引用解决思路》,跪求各位点评,by 搞代码

SQL code

  CREATE TABLE `join` (   `teamNameJ` varchar(50) NOT NULL,   `matchNO` varchar(50) NOT NULL,   `place` varchar(50) NOT NULL,   `result` varchar(50) DEFAULT NULL,   PRIMARY KEY (`teamNameJ`,`matchNO`,`place`),   KEY `matchNO` (`matchNO`),   KEY `place` (`place`),   CONSTRAINT `matchNO` FOREIGN KEY (`matchNO`) REFERENCES `match` (`matchNO`),  //正常       CONSTRAINT `teamNameJ` FOREIGN KEY (`teamNameJ`) REFERENCES `team` (`teamName`),//正常   CONSTRAINT `place` FOREIGN KEY (`place`) REFERENCES `match` (`place`)   //place外键无法插入            ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;  

——解决方案——————–
可能你对主键的概念理解不够深入,子表的外键必须依赖的是主表的主键的全部。
这样写就对了:
CREATE TABLE `join` (
`teamNameJ` varchar(50) NOT NULL,
`matchNO` varchar(50) NOT NULL,
`place` varchar(50) NOT NULL,
`result` varchar(50) DEFAULT NULL,
PRIMARY KEY (`teamNameJ`,`matchNO`,`place`),
KEY `matchNO1` (`matchNO`),
KEY `place` (`place`),
CONSTRAINT `matchNO` FOREIGN KEY (`matchNO`, `place`) REFERENCES `match` (`matchNO`, `place`),
CONSTRAINT `teamNameJ` FOREIGN KEY (`teamNameJ`) REFERENCES `team` (`teamName`)
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

——解决方案——————–
FOREIGN KEY (matchNO,place) REFERENCES `match` (matchNO,place)
——解决方案——————–
KEY mp (matchNO,place),
FOREIGN KEY (matchNO,place) REFERENCES `match` (matchNO,place)
——解决方案——————–
你想实现的功能是什么? 

或者改为如此
CREATE TABLE `join` (
`teamNameJ` varchar(50) NOT NULL,
`matchNO` varchar(50) NOT NULL,
`place` varchar(50) NOT NULL,
`result` varchar(50) DEFAULT NULL,
PRIMARY KEY (`teamNameJ`,`matchNO`,`place`),
KEY `matchNO` (`matchNO`),
KEY `place` (`place`),
CONSTRAINT `matchNO` FOREIGN KEY (`matchNO`) REFERENCES `match` (`matchNO`), //正常
CONSTRAINT `teamNameJ` FOREIGN KEY (`teamNameJ`) REFERENCES `team` (`teamName`),//正常
CONSTRAINT `place` FOREIGN KEY (matchNO,`place`) REFERENCES `match` (matchNO,`place`) //place外键无法插入
) ENGINE=InnoDB DEFAULT CHARSET=gb2312;


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:navicat mysql中,引用属性组作为外键,其中一个无法引用解决思路
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址