【问题标题】:Inserting a row when a foreign key doesn't have a value to refer to当外键没有要引用的值时插入一行
【发布时间】:2026-01-11 16:05:01
【问题描述】:

我正在尝试建立一个论坛网站并设计评论数据库架构。这是我写的。问题是当我发表评论时,我收到了这个错误。
(1452, '无法添加或更新子行:外键约束失败 (reddit.comments, CONSTRAINT comments_ibfk_2 FOREIGN KEY (parentID) REFERENCES comments (commentID) ON DELETE CASCADE ON更新级联)') 我明白为什么我会收到此错误,但我不确定如何解决它。如果可能的话,我想在不创建新回复表的情况下解决它。有没有办法添加不是回复的评论,将其 parentID 设置为零或其他表明它不是回复的值?

CREATE TABLE comments (
    commentID INT NOT NULL AUTO_INCREMENT,
    postID INT NOT NULL,
    parentID INT NOT NULL DEFAULT 0,
    username VARCHAR(30) NOT NULL,
    createdAt DATETIME NOT NULL,
    title VARCHAR(80) NOT NULL,
    content TEXT NOT NULL,
    PRIMARY KEY(commentID),
    FOREIGN KEY(postID) REFERENCES posts(postID)
        ON UPDATE CASCADE
        ON DELETE CASCADE,
    FOREIGN KEY(parentID) REFERENCES comments(commentID)
        ON UPDATE CASCADE
        ON DELETE CASCADE,
    FOREIGN KEY(username) REFERENCES users(username)
        ON UPDATE CASCADE
        ON DELETE CASCADE
 )

【问题讨论】:

  • 试试可以为空的parentID

标签: mysql sql foreign-keys sql-insert create-table


【解决方案1】:

MySQL 支持可为空的外键,我认为这是相关的选项。

因此,只需将parent_id 列设为nullable,即从该列的定义中删除not null 选项(或更改或更改为NULL - 这是缺少选项时的默认值)。

然后您可以在插入(或传递NULL 值)时忽略此列,以表示缺少父评论。

【讨论】:

    最近更新 更多