2017-04-09 69 views
1

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

+-------+------------------+------+-----+---------+----------------+ 
| 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) 
); 
+1

请你分享一下'INSERT'查询吗? –

+0

对于登录表:INSERT INTO login(user,passwd)VALUES('DDan','Password1');对于userinfo表:INSERT INTO userinfo(firstN,lastN,email)VALUES('Dan','Dan','[email protected]'); - –

+1

这可能是因为'logininfo'行在'userinfo'或'userinfo'行有错误的登录ID之前没有被持久化。这是一个简单的例子(http://sqlfiddle.com/#!9/16addb/1/0)。你能否发布代码(执行这些插入)? –

回答

2

这是因为INSERT查询userinfo表中没有登录ID码。您可以通过使用MySQL的LAST_INSERT_ID()功能得到最后插入的ID为login并修改查询,如下图所示:

INSERT INTO login (user, passwd) VALUES ('DDan', 'Password1'); 
INSERT INTO userinfo (firstN, lastN, email, login$id) VALUES ('Dan', 'Dan', '[email protected]', LAST_INSERT_ID()); 

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

+0

你打我:) –

+0

太棒了,非常感谢你! –

相关问题