删除表时,是否也会删除约束?

13

当我删除一张表时,它是否也会删除约束条件?


哪些限制? - user330315
Govinda Mahajan已经回答了...但还是谢谢 :) - Simon B
2
那个答案中的语法对于Oracle是错误的。而且声称引用该表的视图也会被删除也是错误的。我的问题仍然存在:你指的是哪些约束?主键约束或检查约束不需要级联约束。这只适用于外键约束。 - user330315
我认为Oracle文档完全解释了drop table的工作原理oracle doc - Seyran
3
所接受的答案不是Oracle语法。因此,要么您在问题标签中标记了错误的数据库产品,要么您并不关心获取正确的答案。令人困惑。 - APC
1个回答

12

这里是一个简单的表格。它有一个索引、一些完整性约束和一个触发器:

SQL> desc t69
 Name               Null?    Type
 ------------------ -------- ----------------------------
 ID                 NOT NULL NUMBER

SQL> select index_name from user_indexes  where table_name = 'T69';

INDEX_NAME
------------------------------
SYS_C0034158

SQL> select constraint_name, constraint_type from user_constraints where table_name = 'T69';

CONSTRAINT_NAME                C
------------------------------ -
SYS_C0034157                   C
SYS_C0034158                   P

SQL> select trigger_name from user_triggers where table_name = 'T69';

TRIGGER_NAME
------------------------------
TRG69

SQL> 

我们能否不再提及这件事?是的,我们可以!

SQL> drop table t69;

Table dropped.

SQL> select constraint_name, constraint_type from user_constraints where table_name = 'T69';

no rows selected

SQL> select trigger_name from user_triggers where table_name = 'T69';

no rows selected

SQL> 
SQL> select index_name from user_indexes  where table_name = 'T69';

no rows selected

SQL> 

一无所有。当其他对象引用该表时就不同了。

还有另一张表,P23。它被一个外键引用并在一个视图中使用。

SQL> create table c23 (id number, p_id number);

Table created.

SQL> alter table c23 add foreign key (p_id) references p23;

Table altered.

SQL> create view v23 as select * from p23;

View created.

SQL> 

那么我们可以删除这张表吗?

SQL> drop table p23 ;
drop table p23
           *
ERROR at line 1:
ORA-02449: unique/primary keys in table referenced by foreign keys


SQL> 

不,我们不能这样做。顺便提一下,关于RESTRICT语法,Oracle不支持该语法。其实也没有必要使用它,因为我们无法删除强制执行关系完整性的表...除非我们坚持这样做:

SQL> drop table p23 cascade constraints;

Table dropped.

SQL> desc t23
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 COLA                                               NUMBER
 COLB                                               NUMBER
 COLC                                               NUMBER
 GENDER                                             VARCHAR2(1)
 ID                                                 NUMBER

SQL> select * from v23
  2  /
select * from v23
              *
ERROR at line 1:
ORA-04063: view "FOX.V23" has errors


SQL> 

CASCADE CONSTRAINTS子句会删除该表及引用它的任何外键。子表保持不变。引用该表的视图(以及任何 PL/SQL)将保留但处于无效状态。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接