我还是SQL的新手,我有点卡住了。这是我的剧本:
CREATE TABLE Employee
(SSN NUMBER NOT NULL,
FNAME VARCHAR(8) ,
MINIT VARCHAR(1) ,
LNAME VARCHAR(7) ,
BDATE DATE ,
SEX VARCHAR(1) ,
SALARY NUMBER(8,2) ,
SUPERSSN NUMBER ,
DNO NUMBER(2) ,
CONSTRAINT Employee_PK PRIMARY KEY (SSN),
CONSTRAINT Employee_FK1 FOREIGN KEY (SUPERSSN) REFERENCES Employee(SSN));
INSERT INTO Employee (SSN, FNAME, MINIT, LNAME, BDATE, SEX, SALARY, SUPERSSN, DNO)
VALUES (123456789, 'John', 'B', 'Smith', '09-JAN-55', 'M', '30000', '333445555', '5');
COMMIT;
DESC Employee
正如您所看到的,我正在尝试为SUPERSSN>创建约束。 SSN但它总是让我违反了完整性约束 - 找不到父密钥 当我删除CONSTRAINT Employee_FK1 FOREIGN KEY(SUPERSSN)REFERENCES Employee(SSN)时,它可以很好地工作。
但是,如果我保留它并将插入删除到员工脚本中,它也可以正常工作。所以我不确定我做错了什么。
我使用Oracle。
答案 0 :(得分:0)
如果要在列上添加数据,则必须确保其外键具有数据,例如表SUPERSSN
不包含SSN
123456789。< / p>
在SSN = 123456789处插入一个rescord,它将起作用。
我将给你一个关于2个表的例子。
表
FoodMarket
包含Id
和employer
表
sandwich
包含列Id
,Name
和DateCreated
现在从逻辑上讲,如果市场上没有三明治,你就不能吃三明治,对吗?因此,我们在此表上创建一个列id上的外键
alter table Sandwish add CONSTRAINT fk_column
FOREIGN KEY (id)
REFERENCES FoodMarket(id)
所以,如果你想插入一个新的三明治,让我们说汉堡包,它的id应该存在于市场上,如果你在夹心表中插入一个id = 10但是这个值= 10不会。在市场中存在,它会引发错误,您应该在market
中添加第一个 ID 10,以便在表格三明治中插入id =10
。