【问题标题】:MySQL can not add row: foreign key constraint failsMySQL 无法添加行:外键约束失败
【发布时间】:2017-04-10 07:24:40
【问题描述】:

我在向表中插入数据时遇到问题。我已经多次重新创建这两个表来尝试解决我的问题。第一个表 login 包含一个 id(主键)、用户名和密码。第二个表 userinfo 包含一个 id(主键)、名字、姓氏、电子邮件和 login$id(引用登录主键 id 的外键)。我可以很好地插入登录表,我总是先插入它,以便第二个表可以获取第一个表的 id 以用作外键。但是一旦我将数据插入到 userinfo 表中,我就会得到 错误 1452:无法添加或更新子行:外键约束失败。 我不知道为什么它一直无法插入。请提供任何帮助,谢谢。

+-------+------------------+------+-----+---------+----------------+
| Field | Type             | Null | Key | Default | Extra          |
+-------+------------------+------+-----+---------+----------------+
| id    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| user  | varchar(50)      | NO   |     | NULL    |                |
| passwd| varchar(50)      | NO   |     | NULL    |                |
+-------+------------------+------+-----+---------+----------------+

+-------------------+------------------+------+-----+---------+----------------+
| Field             | Type             | Null | Key | Default | Extra          |
+-------------------+------------------+------+-----+---------+----------------+
| id                | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| firstN            | varchar(50)      | NO   |     | NULL    |                |
| lastN             | varchar(50)      | NO   |     | NULL    |                |
| email             | varchar(125)     | NO   |     | NULL    |                |
| login$id          | int(10) unsigned | NO   | MUL | NULL    |                |
+-------------------+------------------+------+-----+---------+----------------+

这是我的表格代码

CREATE TABLE login(
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  user VARCHAR(50) NOT NULL,
  passwd VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
);

CREATE TABLE userinfo(
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  firstN VARCHAR(50) NOT NULL,
  lastN VARCHAR(50) NOT NULL,
  email VARCHAR(125) NOT NULL,
  login$id INT UNSIGNED NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (login$id) REFERENCES login(id)
);

【问题讨论】:

  • 您能分享一下INSERT 查询吗?
  • 对于登录表:INSERT INTO login(user, passwd) VALUES ('DDan', 'Password1');对于 userinfo 表: INSERT INTO userinfo (firstN, lastN, email) VALUES ('Dan', 'Dan', 'email@yahoo.com'); ——
  • 这可能是因为login 行在userinfouserinfo 行之前没有持久化登录ID 错误。这是一个有效的简单示例 (sqlfiddle.com/#!9/16addb/1/0)。您也可以发布代码(执行这些插入)吗?
  • 我正在尝试通过终端窗口填充表格,然后再继续。无论我从哪里编码(php /终端),用户信息的插入都会导致错误。但问题是,您正在为插入调用插入 id 并为外键插入 id,自动增量不会处理这个问题吗?
  • @LonelyTwinkly 提供了答案。

标签: mysql database


【解决方案1】:

这是因为INSERT 查询userinfo 表没有登录ID。您可以使用LAST_INSERT_ID() MySQL 函数获取最后插入的login id,并修改如下查询:

INSERT INTO login (user, passwd) VALUES ('DDan', 'Password1');
INSERT INTO userinfo (firstN, lastN, email, login$id) VALUES ('Dan', 'Dan', 'email@yahoo.com', LAST_INSERT_ID());

这是 SQL Fiddle,这是 LAST_INSERT_ID() 的文档。

【讨论】:

  • 你打败了我 :)
猜你喜欢
  • 1970-01-01
  • 2015-07-26
  • 2012-10-09
  • 2015-06-06
  • 2016-08-09
  • 2011-03-31
  • 2013-08-10
  • 1970-01-01
  • 2016-05-23
相关资源
最近更新 更多