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)