mysql - 如何调试“无法添加或更新子行:外键约束失败”?
问题描述
当子行无法更新时,我遇到了这个问题。
下面是我使用的代码:创建了两个表PUBLISHER
,然后在表为空时向表BOOK
中添加了一些信息,然后当我尝试向表中添加信息时,它给了我一个错误。PUBLISHER
BOOK
BOOK
这是创建的 PUBLISHER 表:
MySQL [rdatabase]> `CREATE TABLE PUBLISHER (PUBLISHER_CODE CHAR (3) PRIMARY KEY, PUBLISHER_NAME CHAR (25), CITY CHAR (20));`
Query OK, 0 rows affected (0.07 sec)
这是创建的 BOOK 表:
MySQL [rdatabase]> `CREATE TABLE BOOK (BOOK_CODE CHAR (4) PRIMARY KEY, TITLE CHAR (40), PUBLISHER_CODE CHAR, FOREIGN KEY (PUBLISHER_CODE) REFERENCES PUBLISHER (PUBLISHER_CODE), TYPE CHAR (3), PRICE DECIMAL (4), PAPERBACK CHAR (1));`
Query OK, 0 rows affected (0.10 sec)
添加到 PUBLISHER 表中的信息:
MySQL [rdatabase]>
INSERT INTO PUBLISHER (PUBLISHER_CODE, PUBLISHER_NAME, CITY)
-> VALUES ('WP', 'Westview Press', 'Boulder CO');
Query OK, 1 row affected (0.01 sec)
MySQL [rdatabase]> `SELECT * FROM PUBLISHER;`
+----------------+----------------+--------------+
| PUBLISHER_CODE | PUBLISHER_NAME | CITY |
+----------------+----------------+--------------+
| AH | Arkham House | Sauk City WI |
| WP | Westview Press | Boulder CO |
+----------------+----------------+--------------+
2 rows in set (0.00 sec)
但是当我试图将信息插入BOOK
表中时,它给了我以下错误:
MySQL [rdatabase]>
INSERT INTO BOOK (BOOK_CODE, TITLE, PUBLISHER_CODE, TYPE, PRICE, PAPERBACK)
-> VALUES ('0180', 'A Deepness in The Sky', 'TB', 'SFI', 7.19, 'Y');
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`rdatabase`.`BOOK`, CONSTRAINT `BOOK_ibfk_1` FOREIGN KEY (`PUBLISHER_CODE`) REFERENCES `PUBLISHER` (`PUBLISHER_CODE`))
解决方案
这是因为您在表中提到PUBLISHER_CODE
了外键,Book
并且表中没有带有PUBLISHER_CODE
as'TB'
的Publisher Publisher
。外键约束在那里失败。
推荐阅读
- java - 有没有办法在包的类代码中访问 @Component 声明的服务属性?
- angular - 在材料选择中显示选定的值
- c# - 如何在大文件的所有行上使用 Parallel.ForEach 循环
- c# - 如何从 OpenFileDialog 获取文件的路径并将其传递给 PDFReader?(C#)
- java - 如何在浏览器/标签关闭时调用注销功能
- javascript - Office.js 获取与内容控件相邻的范围
- selenium - docker-compose 运行多个任务而不共享依赖项
- wcf - 远程 https WCF 服务的 Windows 凭据返回消息安全异常
- r - 负正则表达式在 R 中不起作用
- .htaccess - 这是 RewriteRule 冗余吗?