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