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 数据库使用入门的主要内容,如果未能解决你的问题,请参考以下文章