DROP COLUMN 语句ALTER TABLE 的一部分,会删除一张表中某些列。

概要

图片

所需权限

用户必须拥有 CREATE 权限

参数

Parameter Description
table_name 要删除列的表名
name 要删除列的名字

当有 CHECK 约束的列备删除, CHECK 约束也会被删除。
CASCADE 当有对象依赖这个列(例如 views) ,删除列时,也会删除依赖此列的参数;

CASCADE 不会列出删除的对象, 所以谨慎使用. 但是, CASCADE 不会删除要删除列上的索引;删除索引必须使用 DROP INDEX

New in v2.0: 当我们删除一列时,该列上外键约束上只有这个一列,CASCADE会删除这个外键约束
RESTRICT (Default) 当要删除列上有对象(例如 views)依赖时,删除会失败。

查看结构变化

当我们有变更表结构时,CockroachDB会把这个 操作注册成一个job,可以通过SHOW JOBS查看。

例子

删除列

如果表中某列已经不需要,可以删除它。

> ALTER TABLE orders DROP COLUMN billing_zip;

阻止删除有对象依赖的列 (RESTRICT)

如果某列有对象依赖,例如views,CockroachDB默认不会删除该列;但是,通过RESTRICT可以明确这个操作。

> ALTER TABLE orders DROP COLUMN customer RESTRICT;
pq: cannot drop column "customer" because view "customer_view" depends on it

删除有对象依赖列 (CASCADE)

如果你想删除有对象依赖的列,使用CASCADE

Warning :CASCADE 不会列出删除的对象,请谨慎使用。

> SHOW CREATE VIEW customer_view;
+---------------+----------------------------------------------------------------+
|     View      |                          CreateView                            |
+---------------+----------------------------------------------------------------+
| customer_view | CREATE VIEW customer_view AS SELECT customer FROM store.orders |
+---------------+----------------------------------------------------------------+
> ALTER TABLE orders DROP COLUMN customer CASCADE;
> SHOW CREATE VIEW customer_view;
pq: view "customer_view" does not exist

See Also