首页 > 解决方案 > 错误 1452 “无法添加或更新子行”

问题描述

我正在尝试在 Bridges 表中插入一条新记录,我相信该程序正在尝试在 Bridges 表中使用 Bridge_ID 而不是 User_ID。我在 Ubuntu 操作系统上使用 MySQL 和 Python。

我已经尝试过的事情:

  1. 搜索堆栈溢出(和许多其他网站)

  2. 问我的老师

  3. 干运行代码

sql DDL:

CREATE TABLE User ( 
    User_ID INT NOT NULL AUTO_INCREMENT, 
    Username VARCHAR(30) NOT NULL, 
    Email VARCHAR(50) NOT NULL, 
    Password VARCHAR(64) NOT NULL, 
    PRIMARY KEY (User_ID) 
);


CREATE TABLE Bridges( 
    User_ID INT NOT NULL, 
    Bridge_ID INT NOT NULL AUTO_INCREMENT, 
    Bridge_Name VARCHAR(30) NOT NULL, 
    BridgeFile BLOB NOT NULL, 
    Date_Last_Edit DATE NOT NULL, 
    Difficulty VARCHAR(10) NOT NULL, 
    Land_Type INT NOT NULL, 
    PRIMARY KEY (Bridge_ID), 
    FOREIGN KEY User_ID REFERENCES User(User_ID) 
);

值得注意的是 info['User_ID'] 不会从 1 更改,并且在插入记录之前,会回显 User_ID 持有的值以确认这一点。

提出的查询是:

command = ('INSERT INTO Bridges 
                    (User_ID,Bridge_Name,Date_Last_Edit,
                    BridgeFile,Difficulty,Land_Type) 
            VALUES ("%s","%s",CURDATE(),"%s","%s","%s");'  %(info['User_ID'],name,adjacencyList,info['dif'],info['land']))

错误是:

(1452, '无法添加或更新子行:外键约束失败 ( BridgeBuilder. Bridges, CONSTRAINT Bridges_ibfk_1FOREIGN KEY ( Bridge_ID) REFERENCES User( User_ID))')

如果需要更多详细信息,我会更新帖子。

标签: pythonmysql

解决方案


您应该检查值 info['User_ID'] 是否正确。表Bridges要求User_ID存在于表中User


推荐阅读