有问题使用PHP在mySQL数据库中插入记录

时间:2015-05-12 18:44:27

标签: mysql sql database phpmyadmin

我有两个试图链接的表,一个用户表和注册表:

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`))

请问谁可以提供帮助?

1 个答案:

答案 0 :(得分:1)

userid表中registration列的id列提供的值必须在users的{​​{1}}列的registration列中显示。

外键约束基本上是这样说:“如果userid列的值未找到{{1}的值,则不允许将行添加到id表中} users表中的列。“

您获得的错误消息看起来像是在尝试违反约束时所期望的行为。

这是一个建议:

首先将新行插入users,从该行获取id值,然后将该值用于userid中的registration列。

如果你不能这样做,你可能要考虑为userid列使用NULL值,或者放弃外键约束并完全重新思考你的设计。