03 如何修改数据表? | OushuDB 数据库使用入门

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03 如何修改数据表? | OushuDB 数据库使用入门相关的知识,希望对你有一定的参考价值。


修改表

当我们创建了一个表后发现自己犯了一个错误,或者是应用的需求发生了变化,那么我们可以删除这个表然后重新创建它。

但是如果这个表已经填充了许多数据,或者该表已经被其它数据库对象引用,删除表则可能让事情变得更麻烦。因此OushuDB提供了一组命令用于修改现有表。请注意它在概念上和修改一个表中包含的数据是不一样的:这里我们感兴趣的是修改一个表的定义,或者说是结构。

我们可以:

  • 增加列
  • 删除列
  • 增加约束
  • 删除约束
  • 修改缺省值
  • 修改列数据类型
  • 重命名列
  • 重命名表

以上这些动作都是用ALTER TABLE命令执行的。

需要注意的是仅AO表支持以上所有的操作类型,ORC表仅支持增加约束、删除约束和重命名表,MAGMA则完全不支持上述任何操作。

下面我们来逐个讲解一下。

增加列

要增加一个列,可以使用下面这样的命令:

ALTER TABLE products ADD COLUMN description text DEFAULT value;

表中已经存在的行在新增列后,会在该列先填充所给出的缺省值 ( 注意: AO格式的表在添加新列时必须设置缺省值)。

你也可以同时在该列上定义约束,使用通常的语法:

ALTER TABLE products ADD COLUMN description text DEFAULT value CHECK (description <> );

实际上,所有在CREATE TABLE里描述的可以应用于列的选项都可以在这里使用。不过,我们要注意的是缺省值必须满足给出的约束,否则ADD将会失败。

删除列

要删除一列,使用下面这样的命令:

ALTER TABLE products DROP COLUMN description;

增加约束

要增加一个约束,必须使用表约束语法。比如:

ALTER TABLE products ADD CHECK (name <> );

要增加一个不能写成表约束的非空约束,使用下面的语法:

ALTER TABLE products ALTER COLUMN product_no SET NOT NULL;

这个约束将立即进行检查,所以表在添加约束之前必须符合约束条件。

删除约束

要删除一个约束,你需要知道约束的名字,或者你也可以通过psql 的命令\\d tablename可来进行查询。

删除约束的命令格式为:

ALTER TABLE products DROP CONSTRAINT some_name;

除了非空约束外,所有约束类型都这么用。因为非空约束没有名字,所以要删除非空约束,可以这样:

ALTER TABLE products ALTER COLUMN product_no DROP NOT NULL;

改变列的缺省值

如果需要给某个列设置缺省值,使用下面的语句:

ALTER TABLE products ALTER COLUMN price SET DEFAULT 7.77;

注意,该操作不会影响表中的现存行,它只是改变insert操作插入的未来值。

要移除任何缺省值,使用:

ALTER TABLE products ALTER COLUMN price DROP DEFAULT;

该操作与将该列缺省值设为空等价,因此对没有定义缺省值的列进行此操作不会出错,因为缺省值隐式地被认为是null。

改变列的数据类型

把一个列转换成另外一种数据类型,使用下面的命令:

ALTER TABLE products ALTER COLUMN price TYPE numeric(10,2);

需要注意的是,在修改某列类型之前,最好检查一下之前设置过的一些约束,因为他们可能并不适合新的数据类型。建议将这些约束删除后,再把合适的约束添加上去。

重命名列

重命名一个列:

ALTER TABLE products RENAME COLUMN product_no TO product_number;

重命名表

重命名一个表:

ALTER TABLE products RENAME TO items;

以上是关于03 如何修改数据表? | OushuDB 数据库使用入门的主要内容,如果未能解决你的问题,请参考以下文章

06 数据操纵之数据更新与删除 | OushuDB 数据库使用入门

02 如何创建数据表? | OushuDB 数据库使用入门

OushuDB 创建和管理表空间

OushuDB数据库基本用法(下)

07 数据库查询 | OushuDB 数据库使用入门

09 数据库查询 | OushuDB 数据库使用入门