SQL代码报错:表名无效、缺失右括号,求约束部分语法修正
问题诊断与修正方案
核心错误点
- 表名引用不匹配:创建
"User"表时用了双引号,但后续UserFeed表引用它时未加引号,部分数据库(如Oracle、PostgreSQL)对带引号的标识符严格区分大小写,必须完全匹配创建时的格式。 - 多约束间缺失分隔逗号:
Post、Story、Archive表中,多个FOREIGN KEY约束之间没有用逗号分隔,这是触发missing right parenthesis报错的直接原因。 - 约束名重复:
FK_UserFeedID这个约束名在FactCheck、Post、Story表中重复使用,数据库要求约束名必须全局唯一。
修正后的完整代码
DROP TABLE "User"; DROP TABLE "UserFeed"; DROP TABLE "Post"; DROP TABLE "Story"; DROP TABLE "FactCheck"; DROP TABLE "Archive"; CREATE TABLE "User" ( UserID INT NOT NULL PRIMARY KEY, Username VARCHAR(30) NOT NULL, FirstName VARCHAR(30) NOT NULL, LastName VARCHAR(30) NOT NULL, DateOfBirth DATE NOT NULL, Email VARCHAR(50) NOT NULL ); CREATE TABLE "UserFeed" ( UserFeedID CHAR(10) NOT NULL PRIMARY KEY, PostCount INT NOT NULL, FollowerCount INT NOT NULL, FollowingCount INT NOT NULL, UserID INT NOT NULL, CONSTRAINT FK_UserUserFeed FOREIGN KEY (UserID) REFERENCES "User"(UserID) ); CREATE TABLE "FactCheck" ( RevisionID INT PRIMARY KEY NOT NULL, TrueFalse VARCHAR(1) NOT NULL, UserFeedID CHAR(10) NOT NULL, CONSTRAINT FK_FactCheck_UserFeedID FOREIGN KEY (UserFeedID) REFERENCES "UserFeed"(UserFeedID) ); CREATE TABLE "Post" ( PostID CHAR(10) PRIMARY KEY NOT NULL, Caption VARCHAR(300) NULL, LikeCount INT NOT NULL, CommentCount INT NOT NULL, DatePosted DATE NULL, UserFeedID CHAR(10) NOT NULL, RevisionID INT NOT NULL, CONSTRAINT FK_Post_UserFeedID FOREIGN KEY (UserFeedID) REFERENCES "UserFeed"(UserFeedID), CONSTRAINT FK_Post_RevisionID FOREIGN KEY (RevisionID) REFERENCES "FactCheck"(RevisionID) ); CREATE TABLE "Story" ( StoryID CHAR(10) PRIMARY KEY NOT NULL, StoryCaption VARCHAR(100) NULL, Duration INT NOT NULL, UserFeedID CHAR(10) NOT NULL, StoryDate DATE NULL, RevisionID INT NOT NULL, CONSTRAINT FK_Story_UserFeedID FOREIGN KEY (UserFeedID) REFERENCES "UserFeed"(UserFeedID), CONSTRAINT FK_Story_RevisionID FOREIGN KEY (RevisionID) REFERENCES "FactCheck"(RevisionID) ); CREATE TABLE "Archive" ( ArchiveID CHAR(10) PRIMARY KEY NOT NULL, PostID CHAR(10) NOT NULL, StoryID CHAR(10) NOT NULL, CONSTRAINT FK_Archive_PostID FOREIGN KEY (PostID) REFERENCES "Post"(PostID), CONSTRAINT FK_Archive_StoryID FOREIGN KEY (StoryID) REFERENCES "Story"(StoryID) );
额外说明
- 所有表名统一添加双引号,确保标识符匹配规则一致;
- 约束名改为
FK_表名_关联字段名的格式,彻底避免重复冲突; - 给多约束之间补充逗号,修复语法结构错误;
- 调整了代码缩进,提升可读性。
内容的提问来源于stack exchange,提问作者Rohan Omalley
相关产品推荐
相关产品推荐

