【发布时间】: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行在userinfo或userinfo行之前没有持久化登录ID 错误。这是一个有效的简单示例 (sqlfiddle.com/#!9/16addb/1/0)。您也可以发布代码(执行这些插入)吗? -
我正在尝试通过终端窗口填充表格,然后再继续。无论我从哪里编码(php /终端),用户信息的插入都会导致错误。但问题是,您正在为插入调用插入 id 并为外键插入 id,自动增量不会处理这个问题吗?
-
@LonelyTwinkly 提供了答案。