数据库
达梦
序列:支持
主键自增:支持
使用序列
//1.创建序列
create sequence <序列名> increment by 10...;
//2.使用序列,插入时指定,或者设计表字段默认值为seq1.nextval
insert into <表名>(id,...) values(<序列名>.nextval,...);
ALTER TABLE book ALTER COLUMN id SET DEFAULT <序列名>.nextval;
//3.查看当前序列号
select <序列名>.currval;
使用主键自增
达梦的主键自增功能已经类似于序列了,可以设置起始值、步长
//1.创建表时指定主键字段、自增...
create table org_employee("id" integer identity(1,1) not null,primary key (id)
);
//2.查看当前自增值
select IDENT_CURRENT('<表名>');
注意
- 主键设置了自增就不能使用序列,2者冲突
- 用户会话在第一次使用 currval之前应先使用 nextval获取序列当前值。序列规范定义
神通/金仓/瀚高
三者都是基于Postgres数据库开发的,结构都是类似的,数据库sql语句、语法也一致。
序列:支持
主键自增:不支持(内部使用的是默认序列做的实现)
使用序列
//1.1创建序列-手动
create SEQUENCE <序列名>
ALTER SEQUENCE ALM_DEVICE_ALARM_ID_SEQ RESTART WITH 1;
//1.2创建序列-自动
//smallserial、serial、bigserial为序列号类型,他们分别对应的为int2,int4,int8类型。
//创建表结构时指定某个字段为序列号类型,数据库会自动创建序列<表名>_ID_SET
CREATE TABLE ORG_EMPLOYEE_CHANGE_LOG("_ID" BIGSERIAL NOT NULL,
PRIMARY KEY (_ID)
);
//2.1.手动使用序列
insert into <表名>(id,...) values(<序列名>.nextval,...);
insert into <表名>(id,...) values(nextval('<序列名>'),...);
ALTER TABLE book ALTER COLUMN id SET DEFAULT nextval(<序列名>);
//2.2.自动使用序列,INSERT时如果没有给该字段赋值会默认获取对应序列的下一个值
//3.查看当前序列号
select <表名>_id_seq.CURRVAL
select currval('序列名')