违反了O1RA-0229完整性约束 - 未找到父密钥

时间:2013-11-01 05:58:16

标签: sql foreign-keys constraints

SQL数据库代码:

CREATE TABLE MYBUILDING 
(
B_NUMBER NUMBER(1)      NOT NULL, 
NAME VARCHAR2(25)       NOT NULL, 
ADDRESS VARCHAR2(40)        NOT NULL, 
P_CODE VARCHAR2(6) , 
FLOOR_NUM_UP NUMBER(3)      DEFAULT '1' NOT NULL CHECK (FLOOR_NUM_UP >= 0), 
FLOOR_NUM_DOWN NUMBER(3)    DEFAULT '0' NOT NULL CHECK (FLOOR_NUM_DOWN >= 0), 
CONS_DATE DATE          NOT NULL, 
PRIMARY KEY (B_NUMBER)
); 
-------
CREATE TABLE FLOOR
(
B_NUMBER NUMBER(1)      NOT NULL,
F_NUMBER NUMBER(2)      NOT NULL CHECK (F_NUMBER >= -4 AND F_NUMBER <= 25),
SPACE_M NUMBER(4)       NOT NULL CHECK (SPACE_M > 0), 
PRIMARY KEY (B_NUMBER, F_NUMBER), 
FOREIGN KEY (B_NUMBER) REFERENCES MYBUILDING
); 
------
CREATE TABLE TENANT 
(
TENANT_NUM NUMBER(3)        NOT NULL,
TENANT_NAME VARCHAR2(40)    NOT NULL,
C_NAME VARCHAR2(40)     NOT NULL,
C_ADDRESS VARCHAR2(40),
P_CODE  VARCHAR2(6),
P_NUMBER NUMBER(12),
PRIMARY KEY (TENANT_NUM)
);        
-------
CREATE TABLE LOCATION
(
B_NUMBER NUMBER(1)      NOT NULL,
F_NUMBER NUMBER(2)      NOT NULL,
L_NUMBER NUMBER(3)      NOT NULL CHECK (L_NUMBER > 0 AND L_NUMBER < 100 ), 
SPACE_M NUMBER(4)       NOT NULL, 
RATE NUMBER(5)          NOT NULL CHECK (RATE >= 0 AND RATE <= 350), 
RENT NUMBER(4)          NOT NULL, 
S_DATE DATE, 
E_DATE DATE,
TENANT_NUM NUMBER(3),
PRIMARY KEY (L_NUMBER, F_NUMBER, TENANT_NUM),
CONSTRAINT FK_TENANT FOREIGN KEY (TENANT_NUM) REFERENCES TENANT ON DELETE SET NULL,
FOREIGN KEY (B_NUMBER, F_NUMBER) REFERENCES FLOOR 
); 

大家好!我制作了一系列表格,我认为我做的一切都是正确的。除了LOCATION表之外,我在所有表格上输入了我的输入值。

这是给我的错误。

INSERT INTO LOCATION VALUES (1, 1, 1, 300, 101, 0, '01-JAN-2004', '30-JUN-2004', 1);
INSERT INTO LOCATION VALUES (1, 1, 1, 300, 101, 0, '01-JAN-2004', '30-JUN-2004', 1)
  

第1行的错误:   ORA-02291:违反了完整性约束(ASSIGNMENT.FK_TENANT) - 父密钥   没找到。

任何帮助和提示将不胜感激。谢谢!

固定。

CREATE TABLE LOCATION(

B_NUMBER NUMBER(1)      NOT NULL,

F_NUMBER NUMBER(2)      NOT NULL,

L_NUMBER NUMBER(3)      NOT NULL CHECK (L_NUMBER > 0 AND L_NUMBER < 100 ), 

SPACE_M NUMBER(4)       NOT NULL, 


RATE NUMBER(5)          NOT NULL CHECK (RATE >= 0 AND RATE <= 350), 

RENT NUMBER(4)          NOT NULL, 

S_DATE DATE, 

E_DATE DATE,

TENANT_NUM NUMBER(3)        NULL,

PRIMARY KEY (L_NUMBER, B_NUMBER, F_NUMBER, TENANT_NUM),

FOREIGN KEY (TENANT_NUM) REFERENCES TENANT ON DELETE SET NULL,

FOREIGN KEY (B_NUMBER, F_NUMBER) REFERENCES FLOOR 

); 

1 个答案:

答案 0 :(得分:7)

您的insert语句正在尝试将值插入到TENANT表中不存在的列TENANT_NUM中 - (Location表上有一个外键约束)。