当外键没有可引用的值时插入一行
Inserting a row when a foreign key doesn't have a value to refer to
我正在尝试构建一个论坛网站并设计评论数据库架构。这是我写的。问题是当我 post 发表评论时,出现此错误。
(1452,'Cannot add or update a child row: a foreign key constraint fails (reddit
.comments
, CONSTRAINT comments_ibfk_2
FOREIGN KEY (parentID
) REFERENCES comments
(commentID
) ON DELETE CASCADE ON UPDATE CASCADE)')
我明白为什么会收到此错误,但我不确定如何修复它。如果可能的话,我想在不创建新回复 table 的情况下解决它。有没有办法添加不是回复的评论,其 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
)
MySQL 支持可为空的外键,我认为这是这里的相关选项。
因此,只需使 parent_id
列 null
可用,即从该列的定义中删除 not null
选项(或将 or 更改为 NULL
-这是缺少选项时的默认值。
然后您可以在插入(或传递 NULL
值)时忽略此列,以表示缺少父注释。
我正在尝试构建一个论坛网站并设计评论数据库架构。这是我写的。问题是当我 post 发表评论时,出现此错误。
(1452,'Cannot add or update a child row: a foreign key constraint fails (reddit
.comments
, CONSTRAINT comments_ibfk_2
FOREIGN KEY (parentID
) REFERENCES comments
(commentID
) ON DELETE CASCADE ON UPDATE CASCADE)')
我明白为什么会收到此错误,但我不确定如何修复它。如果可能的话,我想在不创建新回复 table 的情况下解决它。有没有办法添加不是回复的评论,其 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
)
MySQL 支持可为空的外键,我认为这是这里的相关选项。
因此,只需使 parent_id
列 null
可用,即从该列的定义中删除 not null
选项(或将 or 更改为 NULL
-这是缺少选项时的默认值。
然后您可以在插入(或传递 NULL
值)时忽略此列,以表示缺少父注释。