删除表

DROP TABLE 从数据库编录中删除表。如果有任何投影与该表相关联,则 DROP TABLE 会返回一条错误消息,除非它还包含 CASCADE 选项。有一个例外:该表仅有一个自动生成的超投影(自动投影)与之关联。

使用 CASCADE

在以下示例中,DROP TABLE 尝试移除有多个投影与之关联的表。由于它省略了 CASCADE 选项,因此 Vertica 返回错误:

=> DROP TABLE d1;
NOTICE: Constraint - depends on Table d1
NOTICE: Projection d1p1 depends on Table d1
NOTICE: Projection d1p2 depends on Table d1
NOTICE: Projection d1p3 depends on Table d1
NOTICE: Projection f1d1p1 depends on Table d1
NOTICE: Projection f1d1p2 depends on Table d1
NOTICE: Projection f1d1p3 depends on Table d1
ERROR: DROP failed due to dependencies: Cannot drop Table d1 because other objects depend on it
HINT: Use DROP ... CASCADE to drop the dependent objects too.
=> DROP TABLE d1 CASCADE;
DROP TABLE
=> CREATE TABLE mytable (a INT, b VARCHAR(256));
CREATE TABLE
=> DROP TABLE IF EXISTS mytable;
DROP TABLE
=> DROP TABLE IF EXISTS mytable; -- Doesn't exist
NOTICE:  Nothing was dropped
DROP TABLE

下一次尝试包含 CASCADE 选项,因此成功:

=> DROP TABLE d1 CASCADE;
DROP TABLE
=> CREATE TABLE mytable (a INT, b VARCHAR(256));
CREATE TABLE
=> DROP TABLE IF EXISTS mytable;
DROP TABLE
=> DROP TABLE IF EXISTS mytable; -- Doesn't exist
NOTICE:  Nothing was dropped
DROP TABLE

使用 IF EXISTS

在以下示例中,DROP TABLE 包含选项 IF EXISTS。此选项指定当要删除的一个或多个表不存在时不报告错误。此子句在 SQL 脚本(例如在尝试重新创建表之前确保它已被删除)中十分有用。

=> DROP TABLE IF EXISTS mytable;
DROP TABLE
=> DROP TABLE IF EXISTS mytable; -- Table doesn't exist
NOTICE:  Nothing was dropped
DROP TABLE

删除和还原视图表

如果视图引用的表被删除,然后替换为同名的其他表,则该视图会继续正常运行,并使用新表的内容。新表必须具有相同的列定义。