drop table是否也会删除约束?

时间:2017-04-19 06:32:30

标签: sql oracle ddl

当我drop表时它也会删除约束吗?

1 个答案:

答案 0 :(得分:5)

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

tf.concat(1,matrices)

我们可以放弃吗?是的,我们可以!

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> 

什么都没有。当其他对象引用该表时,它会有所不同。

还有另一张桌子,P23。它由外键引用并在视图中使用。

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> 

那么我们可以放弃这张桌子吗?

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> 

不,我们不能。顺便提一下,关于RESTRICT语法,Oracle不支持。没有必要,我们不能删除强制关系完整性的表格......除非我们坚持这样做:

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


SQL> 

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