我有两个试图链接的表,一个用户表和注册表:
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL auto_increment,
`first_name` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`password` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;
CREATE TABLE IF NOT EXISTS `registration` (
`userid` int(11) NOT NULL,
`sex` varchar(10) NOT NULL,
`dob` date NOT NULL,
`location` varchar(30) NOT NULL,
`edu_level` varchar(32) NOT NULL,
`work` varchar(30) NOT NULL,
`rel_status` varchar(10) NOT NULL,
KEY `userid` (`userid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
我在phpadmin中使用设计选项卡创建了它们之间的链接,但是当我将记录插入到注册表中时,它仍然这样说:
无法添加或更新子行:外键约束失败
(`letzfuze/registration`, CONSTRAINT `registration_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `users` (`id`))
请问谁可以提供帮助?
答案 0 :(得分:1)
userid
表中registration
列的id
列提供的值必须在users
的{{1}}列的registration
列中显示。
外键约束基本上是这样说:“如果userid
列的值未找到{{1}的值,则不允许将行添加到id
表中} users
表中的列。“
您获得的错误消息看起来像是在尝试违反约束时所期望的行为。
这是一个建议:
首先将新行插入users
,从该行获取id
值,然后将该值用于userid
中的registration
列。
如果你不能这样做,你可能要考虑为userid
列使用NULL值,或者放弃外键约束并完全重新思考你的设计。