关于删除级联SQL

时间:2014-03-08 09:06:53

标签: sql

代码是作为脚本编写的,当我第二次运行此脚本时,不会丢弃表EMPLOYEE_TBL,因为发生了各种错误。

现在问题是:为什么DROP TABLE EMPLOYEE_TBL没有工作?

DROP TABLE EMPLOYEE_TBL;
    DROP TABLE EMPLOYEE_PAY_TBL; 
    Create table EMPLOYEE_TBL(
      EMP_ID VARCHAR(9), 
    LAST_NAME VARCHAR(15) NOT NULL, 
    FIRST_NAME VARCHAR(15) NOT NULL, 
    MIDDLE_NAME VARCHAR(15), 
    ADDRESS VARCHAR(50) NOT NULL, 
    CITY VARCHAR(15) NOT NULL, 
    STATE VARCHAR(10) NOT NULL, 
    ZIP NUMBER(5) NOT NULL, 
    PHONE VARCHAR(15), 
    PAGER VARCHAR(15) );
    Alter table EMPLOYEE_TBL
    add constraints pk_EMPLOYEE_TBL primary key (EMP_ID);

     commit;

    Create table EMPLOYEE_PAY_TBL (
    EMP_ID VARCHAR(9), 
    POSITION VARCHAR(15) NOT NULL, 
    DATE_HIRE DATE, 
    PAY_RATE DECIMAL(4,2) NOT NULL, 
    DATE_LAST_RAISE DATE, 
    Salary Decimal (4, 2), 
    Bonus Decimal (4, 2) );
    --CONSTRAINT EMP_FK FOREIGN KEY (EMP_ID_ REFERENCES 
    --EMPLOYEE_TBL (EMP_ID)); 

    commit;
    Alter table EMPLOYEE_PAY_TBL
    add constraints pk_EMPLOYEE_PAY_TBL primary key (EMP_ID);


    alter table EMPLOYEE_PAY_TBL
    add constraints fk_EMP_ID foreign key (EMP_ID) references EMPLOYEE_TBL (EMP_ID) ON DELETE CASCADE;

2 个答案:

答案 0 :(得分:0)

第二次,当你尝试删除EMPLOYEE_TBL时,你有这个约束:

alter table EMPLOYEE_PAY_TBL
add constraints fk_EMP_ID foreign key (EMP_ID) references EMPLOYEE_TBL (EMP_ID)
ON DELETE CASCADE;

因此,您必须在删除此约束之前删除该表。

有关详细信息,请发布您的错误

答案 1 :(得分:0)

您无法删除TABLE EMPLOYEE_TBL,因为它被EMPLOYEE_PAY_TBL引用。

ON DELETE CASCADE选项是指删除父表中的 rows ,而不是删除父表。

根据DDL判断,您最有可能使用Oracle。在这种情况下,您可以在删除表时使用cascade关键字:

DROP TABLE EMPLOYEE_TBL CASCADE CONSTRAINTS;
DROP TABLE EMPLOYEE_PAY_TBL CASCADE CONSTRAINTS; 

CASCADE的{​​{1}}选项会自动删除所有外键引用正在删除的表。