删除表

要删除表,必须拥有删除该表的系统权限。

可以用DROP TABLE语句删除表定义及该表的所有数据、索引、触发器、约束和权限规范。

下例从当前数据库中删除drop_b表及其数据和索引以及依赖的视图。

CREATE TABLE drop_b(column_a INT PRIMARY KEY);

CREATE VIEW drop_b_v AS SELECT * FROM drop_b;

DROP TABLE drop_b CASCADE;

删除表时,表上的规则或默认值将解除绑定,任何与表关联的约束或触发器将自动删除。如果重新创建表,必须重新绑定适当的规则和默认值,重新创建任何触发器并添加必要的约束。

在系统表上不能使用 DROP TABLE 语句。

如果删除表内的所有行 (DELETE tablename) 或使用 TRUNCATE TABLE 语句,则表将一直存在到被删除。

注解

在删除表之前,请三思而后行:

  • 删除表就会从数据字典中删除该表的定义,也就再也不能访问该表的任何数据了。
  • 与表相关的所有索引和触发器也将被同时删除。
  • 已经分配给被删除表的索引磁盘空间都划归空闲空间,当任何其它对象需要新的磁盘空间时就可以使用它。
  • 如果仅仅想清空表的内容,可以使用TRUNCATE语句。TRUNCATE语句提供了一个快速、有效的方法来从表中删除索引的行,但不影响与该正在被清空的表相关的任何结构(列定义、约束、触发器等等)或授权。TRUNCATE操作不记录日志,这使其效率要比DELETE高得多,也导致这个操作是不能回退的,它不能在一个事务中发生,必须单独使用TRUNCATE。