问题描述
我有一张桌子:
CREATE TABLE SHIP_CABINS
(
SHIP_CABIN_ID NUMBER,SHIP_ID NUMBER,GUESTS NUMBER(3),SQ_FT NUMBER(6),CONSTRAINT SHIP_CABIN_ID_PK PRIMARY KEY (SHIP_CABIN_ID)
);
然后我像这样放下桌子:
DROP TABLE SHIP_CABINS;
因为我没有使用CASCADE CONSTRAINTS
,所以删除表后主键约束SHIP_CABIN_ID_PK仍然存在。
在表格不再存在后,我不知道如何删除主键。请帮忙。
解决方法
这里似乎有一个误解。删除表确实会删除其主键约束。
cascade constraints
是另一种野兽,意在自动删除引用要删除的表的外键约束。如果存在此类约束,除非您指定该选项,否则数据库将阻止您删除表。
-- create the table
create table ship_cabins (
ship_cabin_id number,ship_id number,guests number(3),sq_ft number(6),constraint ship_cabin_id_pk primary key (ship_cabin_id)
);
-- check the table constraints
select constraint_name,constraint_type from user_constraints where table_name = 'SHIP_CABINS';
CONSTRAINT_NAME | CONSTRAINT_TYPE
:--------------- | :--------------
SHIP_CABIN_ID_PK | P
-- drop the table
drop table ship_cabins;
-- the PK constraint is gone
select constraint_name,constraint_type from user_constraints where table_name = 'SHIP_CABINS';
CONSTRAINT_NAME | CONSTRAINT_TYPE
:-------------- | :--------------