Oracle员工约束

时间:2015-11-16 07:52:38

标签: sql oracle foreign-keys

我还是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。

1 个答案:

答案 0 :(得分:0)

如果要在列上添加数据,则必须确保其外键具有数据,例如表SUPERSSN不包含SSN 123456789。< / p>

在SSN = 123456789处插入一个rescord,它将起作用。

我将给你一个关于2个表的例子。

  

FoodMarket包含Idemployer

     

sandwich包含列IdNameDateCreated

现在从逻辑上讲,如果市场上没有三明治,你就不能吃三明治,对吗?因此,我们在此表上创建一个列id上的外键

  alter table Sandwish add CONSTRAINT fk_column
    FOREIGN KEY (id)
    REFERENCES FoodMarket(id)

所以,如果你想插入一个新的三明治,让我们说汉堡包,它的id应该存在于市场上,如果你在夹心表中插入一个id = 10但是这个值= 10不会。在市场中存在,它会引发错误,您应该在market中添加第一个 ID 10,以便在表格三明治中插入id =10