VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

ALTER TABLE

功能描述

修改表,包括修改表的定义、重命名表、重命名表中指定的列、重命名表的约束、设置表的所属模式、添加或更新多个列、打开或关闭行访问控制开关。

本文档仅介绍ALTER TABLE在SQL Server兼容模式下的特性用法,修改表的更多用法介绍详见开发者指南中的SQL语法ALTER TABLE

Vastbase在SQL Server兼容模式下支持在ALTER TABLE给表新增字段时为该字段指定IDENTITY属性,用于获得自动增加的标识号。被该属性修饰的字段即为表的标识列。

注意事项

  • 该功能仅在数据库兼容模式为SQL Server时支持(即数据库初始化时指定DBCOMPATIBILITY='MSSQL')。
  • 一个表最多只能有一个具有IDENTITY属性的标识列。
  • IDENTITY标识列的字段值是自动生成的,不能手动插入。
  • 不支持使用ALTER TABLE的ALTER COLUMN子句和MODIFY子句对已存在的具有IDENTITY属性的字段进行修改。

语法格式

ALTER TABLE为指定表新增字段的语法如下:

ALTER TABLE table_name ADD [ COLUMN ] column_name data_type [ compress_mode ] [ COLLATE collation ] [ IDENTITY [ (seed , increment) ] ] [ column_constraint [ ... ] ]; 

参数说明

  • table_name

    需要修改的表的名称。

    取值范围:当前存在的表的名称。

  • [ COLUMN ] column_name

    新增字段的名称。

  • data_type

    新增字段的数据类型。

  • compress_mode

    列的压缩可选项,该选项指定表字段优先使用的压缩算法。包括{ DELTA | PREFIX | DICTIONARY | NUMSTR | NOCOMPRESS }

  • COLLATE collation

    COLLATE子句指定列的排序规则(该列必须是可排列的数据类型)。如果没有指定,则使用默认的排序规则。

  • IDENTITY [ (seed , increment) ]

    被指定了IDENTITY属性的字段为表的标识列

    • seed: 要分配给表中第一行标识列的整数值。

      后续每一行标识列的值,等于上一个IDENTITY值加上increment值。如果既没有指定seed,也没有指定increment,那么它们都默认为1。

    • increment: 两个相邻标识值之间的差值。

    seed与increment为可选参数,使用时两者必须同时指定,否则将报错。

  • column_constraint

    字段的列约束内容。

示例

ALTER TABLE时为表新增具有IDENTITY属性的列。

1、创建测试表。

create table t_identity(col text);

2、为表新增名为id的列,并为其指定IDENTITY属性。(不指定seed和increment参数。)

alter table t_identity add id int primary key identity;

3、向测试表中插入数据。

insert into t_identity(col) values('张三');
insert into t_identity(col) values('李四');
insert into t_identity(col) values('王五');

4、查看测试表数据。

select * from t_identity;

5、返回结果如下,标识列id的数据正常:

 col  | id
------+----
 张三 |  1
 李四 |  2
 王五 |  3
(3 rows)

6、删除具有IDENTITY属性的字段id。

alter table t_identity drop id;

7、查看测试表当前数据。

select * from t_identity;

返回结果如下:

 col
------
 张三
 李四
 王五
(3 rows)

8、重新为测试表添加具有IDENTITY属性的字段id,同时指定seed和increment参数。

alter table t_identity add id int primary key identity(5,10);

9、查看测试表数据。

select * from t_identity;

返回结果如下:

 col  | id
------+----
 张三 |  5
 李四 | 15
 王五 | 25
(3 rows)