使用外键约束向表添加行[MySQL]

时间:2011-03-10 17:46:10

标签: mysql foreign-keys

我有一个新表,它对旧的旧表有一个外键约束。旧表填充了大量数据,但是当我尝试向引用旧表中的行的新表添加行时,出现Cannot add or update a child row: a foreign key constraint fails错误。

如何向引用旧表中的行的新表添加行?

修改 以下是我尝试的两个查询:

mysql> select user_pk from users where username = 'test_user';
+---------+
| user_pk |
+---------+
|  123766 |
+---------+
1 row in set (0.00 sec)

mysql> insert into uservisit (user_id) values (123766);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`test_database`.`uservisit`, CONSTRAINT `user_id_refs_user_pk_37c3999c` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_pk`))

我做错了吗?

3 个答案:

答案 0 :(得分:4)

您可以临时禁用外键检查,如下所示:

SET foreign_key_checks = 0;
...
do updates
...
SET foreign_key_checks = 1;

更好地确保在所有更新之后,所有内容都按顺序排列外键。

答案 1 :(得分:0)

插入新行时,使用外键放入列的值也必须存在于旧表的引用列中。

也许如果你通过一些查询和示例数据,它会更容易提供帮助。

答案 2 :(得分:0)

如果您使用5.5.13之前的MySQL版本,则可能遇到此错误:
MySQL 5.5 foreign key constraint fails when foreign key exists