更改表时出错,添加约束外键获取错误 无法添加或更新子行"

本教程将介绍更改表时出错,添加约束外键获取错误“无法添加或更新子行"的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

更改表时出错,添加约束外键获取错误 无法添加或更新子行" 教程 第1张

问题描述

mysql> DESCRIBE questions;
+----------+--------------+------+-----+---------+----------------+
| Field | Type| Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(255)  | NO| PRI | NULL | auto_increment |
| question | varchar(255) | NO|  | NULL | |
| type  | char(1)| YES  |  | NULL | |
+----------+--------------+------+-----+---------+----------------+
mysql> DESCRIBE answers;+--------------+--------------+------+-----+---------+----------------+
| Field  | Type| Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id  | int(255)  | NO| PRI | NULL | auto_increment |
| answer | varchar(255) | NO|  | NULL | |
| questionid| int(255)  | NO|  | NULL | |
| questions_id | int(255)  | NO|  | NULL | |
+--------------+--------------+------+-----+---------+----------------+

我正在使用这种说法:

ALTER TABLE 答案添加外键(questions_id)参考问题(id);

但我得到这个错误:

ERROR 1452 (23000):无法添加或更新子行:外键约束失败(surveydb.#sql-df_32,CONSTRAINT #sql-df_32_ibfk_1 FOREIGN KEY (questions_id) REFERENCES questions (id)) 到您的 MySQL 服务器版本,以便在附近使用正确的语法第 1 行的描述问题"

推荐答案

answers.questions_id 中至少有一个数据值在 questions.id 中没有出现.

这是我的意思的一个例子:

mysql> create table a ( id int primary key);

mysql> create table b ( aid int );

mysql> insert into a values (123);

mysql> insert into b values (123), (456);

mysql> alter table b add foreign key (aid) references a(id);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint 
fails (`test`.`#sql-3dab_e5c`, CONSTRAINT `#sql-3dab_e5c_ibfk_1` FOREIGN KEY
(`aid`) REFERENCES `a` (`id`))

您可以使用它来确认存在不匹配的值:

SELECT COUNT(*)
FROM answers AS a
LEFT OUTER JOIN questions AS q ON a.questions_id = q.id
WHERE q.id IS NULL

好了关于更改表时出错,添加约束外键获取错误“无法添加或更新子行"的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。