在Oracle中删除表后如何删除主键约束

问题描述

我有一张桌子:

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是另一种野兽,意在自动删除引用要删除的表的外键约束。如果存在此类约束,除非您指定该选项,否则数据库将阻止您删除表。

考虑following demo

-- 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
:-------------- | :--------------