赞
踩
在DM 数据库中,自增有两种方法实现,一种是自增列,另一种通过序列实现。
在创建表时可以制定列是否自增。 一个表只能有一个自增列。
语法格式
IDENTITY [ (种子, 增量) ]
参数
1.种子:装载到表中的第一个行所使用的值;
2.增量:增量值,该值被添加到前一个已装载的行的标识值上。增量值可以为正数或负数,但不能为 0。
使用说明
1.IDENTITY 适用于 int(-2147483648~+2147483647)、bigint(-2^63~+2^63-2)类型的列;每个表只能创建一个自增列;
2.不能对自增列使用 DEFAULT 约束;
3.必须同时指定种子和增量值,或者二者都不指定。如果二者都未指定,则取默认值(1,1);若种子或增量为小数类型,报错;
4.最大值和最小值为该列的数据类型的边界;
5.建表种子和增量大于最大值或者种子和增量小于最小值时报错;
6.自增列一旦生成,无法更新,不允许用 Update 语句进行修改;
create table TEST1(id int identity,name varchar(20));
insert into TEST1(name) values('张三');
insert into TEST1(name) values('李四');
commit;
select * from TEST1;
语法格式:
SET IDENTITY_INSERT [<模式名>.]<表名> ON | OFF;
使用说明
1.IDENTITY_INSERT 属性的默认值为 OFF。SET IDENTITY_INSERT 的设置是在执行或运行时进行的。当一个连接结束,IDENTITY_INSERT 属性将被自动还原为 OFF;
2.DM 要求一个会话连接中只有一个表的 IDENTITY_INSERT 属性可以设置为 ON,当设置一个新的表 IDENTITY_INSERT 属性设置为 ON 时,之前已经设置为 ON 的表会自动还原为 OFF。当一个表的 IDENTITY_INSERT 属性被设置为 ON 时,该表中的自动增量列的值由用户指定。如果插入值大于表的当前标识值(自增列当前值),则 DM 自动将新插入值作为当前标识值使用,即改变该表的自增列当前值;否则,将不影响该自增列当前值;
3.当设置一个表的 IDENTITY_INSERT 属性为 OFF 时,新插入行中自增列的当前值由系统自动生成,用户将无法指定;
4.自增列一经插入,无法修改;
5.手动插入自增列,除了将 IDENTITY_INSERT 设置为 ON,还要求在插入列表中明确指定待插入的自增列列名。插入方式与非 IDENTITY 表是完全一样的。如果插入时,既不指定自增列名也不给自增列赋值,则新插入行中自增列的当前值由系统自动生成。
set identity_insert SYSDBA.TEST1 on;
insert into TEST1 values(5,'王五'); --此处不能简写
insert into TEST1(id,name) values(5,'王五');
select * from TEST1;
序列是一个数据库实体,通过它多个用户可以产生唯一整数值,可以用序列来自动地生成主关键字值。
语法格式:
CREATE SEQUENCE [ <模式名>.] <序列名> [ <序列选项列表>];
<序列选项列表> ::= <序列选项>{<序列选项>}
<序列选项> ::=
INCREMENT BY <增量值>|
START WITH <初值>|
MAXVALUE <最大值>|
NOMAXVALUE|
MINVALUE <最小值>|
NOMINVALUE|
CYCLE|
NOCYCLE|
CACHE <缓存值>|
NOCACHE|
ORDER |
NOORDER |
GLOBAL |
LOCAL
参数
create table sequ(id int);
create sequence seq_id increment by 6; --创建序列
insert into sequ values(seq_id.nextval);
insert into sequ values(seq_id.nextval);
commit;
select * from sequ;
create sequence seq_id1 increment by 1; --创建序列 自增列为1
create table sequ1(id number default seq_id1.nextval , --将序列作为默认值,可以实现自增效果
name varchar2(20));
insert into sequ1(name) values('张三');
insert into sequ1(name) values('李四');
commit;select * from sequ1;
在达梦DM8_2023年5月后新增兼容自增列auto_increment语法
默认等价于identity(1,1)情况
更多达梦相关材料可以参考达梦数据库官方适配中心达梦数据库 - 新一代大型通用关系型数据库 | 达梦在线服务平台
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。