当前位置: 首页 > 知识库问答 >
问题:

试图在SQL中为表创建外键时出错?[副本]

武向文
2023-03-14
CREATE TABLE SCREEN(
BRANCHID CHAR(2) NOT NULL,
SCREENID CHAR(2) NOT NULL,
SCREENCACPACITY NUMBER(3),
CONSTRAINT SCREEN_PK PRIMARY KEY(BRANCHID, SCREENID),
CONSTRAINT SCREEN_FK FOREIGN KEY(BRANCHID) REFERENCES BRANCH(BRANCHID));
CREATE TABLE SESSIONS(
SESSIONID CHAR(4) NOT NULL,
BRANCHID CHAR(2) NOT NULL,
SCREENID CHAR(2) NOT NULL,
MOVIEID CHAR(2) NOT NULL,
SESSIONDATE DATE,
SESSIONPRICE NUMBER(4,2),
CONSTRAINT SESSIONS_PK PRIMARY KEY(SESSIONID),
CONSTRAINT SESSIONS_FK1 FOREIGN KEY(BRANCHID) REFERENCES BRANCH(BRANCHID),
CONSTRAINT SESSIONS_FK2 FOREIGN KEY(SCREENID) REFERENCES SCREEN(SCREENID),
CONSTRAINT SESSIONS_FK3 FOREIGN KEY(MOVIEID) REFERENCES MOVIE(MOVIEID));

分支和电影屏幕已经制作完成,或多或少与屏幕相同。帮助pl0x

共有1个答案

黄无尘
2023-03-14

大多数(如果不是全部)支持外键的SQL类型都将强制您将外键指向整个主键。在您的示例中,table SCREEN有(BRANCHID,SCREENID)作为PK,但您的SESSIONS_FK2 FK只指向SCREENID。

您应该创建一个指定这两个列的外键。类似于:

CONSTRAINT FK_SESSION_SCREEN FOREIGN KEY (BRANCHID, SCREENID) REFERENCES SCREEN(BRANCHID, SCREENID)

其他需要考虑的事项:

 类似资料:
  • 我有两张这样桌子: 和 我想为..设置外键,但我遇到了以下错误: ALTER TABLE语句与FOREIGN KEY约束“tblPerson_GenderID_FK”冲突。冲突发生在数据库“示例”、表“dbo.tbl性别”、列“id”中。

  • 问题内容: 如何创建外键 从表tGeoAnswers列’locationId’ 表tLocations列“ ID”? 我正在尝试找到的这段代码,但出现以下错误: “ FK_Answer_Location”列的定义必须包含数据类型 问题答案: 否则,假设您要添加名为的列。

  • 我试图从使用FileAppender切换到使用log4j2的RollingFileAppender(在beta3和beta4 jar中都会发生)。 看起来好像正在读取配置文件,并且appender正在试图创建,但不确定我做错了什么。 我尝试过剪切和粘贴其他人的RollingFileAppender配置,但我仍然得到上面的错误。 谢了。

  • 我是SQL新手,正在尝试创建一个如下的模式。然而,我似乎不能正确获得成员表的外键。我试着在表创建后添加它,最初似乎工作正常,但现在当我试图添加一个测试数据行时,我得到了这个错误。 我敢肯定,这是我错过的非常愚蠢的事情,但如果有人能指出我做错了什么,那就太好了! 错误代码:1452。无法添加或更新子行:外键约束失败 (。,CONSTRAINTFOREIGN KEY()REFERENCES()) 无法

  • 问题内容: 我有很多带有外键的表,有些表有索引,而另一些则没有。所有外键均使用名为的索引命名。 给定外键的列基数,是否有一些好的做法来创建(或不创建)索引?可以将此脚本编写为T-SQL命令吗? 问题答案: 它们是通过T- SQL脚本还是通过设计器创建的,都没有关系。您的问题有点模棱两可,所以我不确定您是否也在询问是否可以索引所有外键。但是,如果是这样,则应该在查询中经常引用的列上创建索引,并且可以

  • 下面是我创建的表格。 创建嵌套表时出现以下错误。 ORA-02320:为嵌套表列odetails\u ntab ORA-25175创建存储表失败:找不到主键约束02320。00000-“为嵌套表列%s创建存储表失败”*原因:为指定的嵌套表列创建存储表时出错*操作:有关更多详细信息,请参阅下面的消息。如果他们描述的情况能够得到纠正,那么就这样做;否则请与Oracle支持部门联系。 获取第9行ORA-