代码是作为脚本编写的,当我第二次运行此脚本时,不会丢弃表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;
答案 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}}选项会自动删除所有外键引用正在删除的表。