【发布时间】:2022-01-04 14:32:12
【问题描述】:
错误发生在这里:
CREATE TABLE CERDIT_CARD_LOG
(
CERDIT_CARD_NUMBER CHAR(20) NOT NULL,
CERDIT_CARD_LOG_NUMBER CHAR(15) NOT NULL,
CERDIT_CARD_NUM CHAR(20) NOT NULL,
DATE DATE NOT NULL,
OPERATION_TYPE CHAR(20) NOT NULL,
CONSTRAINT PK_CERDIT_CARD_LOG
PRIMARY KEY (CERDIT_CARD_LOG_NUMBER, CERDIT_CARD_NUM)
);
ALTER TABLE CERDIT_CARD_LOG
ADD CONSTRAINT FK_CERDIT_C_RECORD_CERDIT_C
FOREIGN KEY (CERDIT_CARD_NUMBER)
REFERENCES CERDIT_CARD (CERDIT_CARD_NUMBER);
【问题讨论】:
-
外键必须引用整个键。在这种情况下,两列,而不仅仅是一列。
-
这是一张信用卡 - 不是“cerdit 卡” ....
-
DATE是保留字,en.wikipedia.org/wiki/SQL_reserved_words。要么选择别的东西,要么定界为"DATE"。 -
只需将其更改为
CREDIT_CARD_DATE。同时搜索“CERDIT”并将其替换为“CREDIT”。 -
如前所述,您应该将此日期称为不同的日期。这甚至可以澄清日期的内容。也许是卡的
EXPIRATION_DATE?而且,顺便说一句,你永远不应该使用CHAR。这种数据类型在查询中使用起来很麻烦,在任何方面都比VARCHAR2没有优势。