在Oracle中外键是约束的一种。
ALTER TABLE 从表 ADD (CONSTRAINT FK_TEST FOREIGN KEY(id) REFERENCES 主表(id) ON DELETE CASCADE);

解决方案 »

  1.   

    SQL> DESC A
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     ID                                                 VARCHAR2(5)SQL> DESC B
     名称                                      是否为空? 类型
     ----------------------------------------- -------- ----------------------------
     ID                                                 VARCHAR2(5)SQL> TRUNCATE TABLE B;表已截掉。SQL> ALTER TABLE B ADD (CONSTRAINT FK_TEST FOREIGN KEY(ID) REFERENCES A(ID) ON DELETE CASCADE);
    ALTER TABLE B ADD (CONSTRAINT FK_TEST FOREIGN KEY(ID) REFERENCES A(ID) ON DELETE CASCADE)
                                                                       *
    ERROR 位于第 1 行:
    ORA-02270: 此列列表的唯一或主键不匹配
    SQL> ALTER TABLE A ADD PRIMARY KEY(ID);表已更改。SQL> ALTER TABLE B ADD (CONSTRAINT FK_TEST FOREIGN KEY(ID) REFERENCES A(ID) ON DELETE CASCADE);表已更改。SQL> SELECT *FROM A;ID
    -----
    123
    AC_BD
    ACBD
    A_BDSQL> INSERT INTO B VALUES('1');
    INSERT INTO B VALUES('1')
    *
    ERROR 位于第 1 行:
    ORA-02291: 违反完整约束条件 (TEST.FK_TEST) - 未找到父项关键字
    SQL> INSERT INTO B VALUES('123');已创建 1 行。SQL> INSERT INTO B VALUES('123');已创建 1 行。SQL> COMMIT;提交完成。SQL> SELECT *FROM B;ID
    -----
    123
    123可以看出,设置外键,要求主表中的被引用字段必须是唯一的,而从表不受限制。