人大金仓自增序列替换AUTO_INCREMENT

人大金仓自增序列替换AUTO_INCREMENT

下面阐述由MySQL的AUTO_INCREMENT如何转换为人大金仓数据库不能使用MySQL的AUTO_INCREMENT来添加数据库自动自增。人大金仓数据库有自己的自增序列方法。

人大金仓定义了三种序列类型分别是smallserial、serial、bigserial,他们分别对应的为int2,int4,int8类型。

1.创建自增序列

例如:在int8类型上增加序列。有两种方法,第一种是直接使用序列类型定义字段;第二中是使用普通类型字段,但需要另外显示定义序列。

1.1 使用序列类型定义字段

-- 使用bigserial时,数据库会默认创建一个名为user_id_seq(表名_字段名_sql)的序列
DROP TABLE IF EXISTS "user";
CREATE TABLE "user"(
	"id" bigserial NOT NULL,
	"user_name" varchar(20 char) NOT NULL,
	"age" int4,
	CONSTRAINT "user_pk" PRIMARY KEY (id);
);

1.2 手动创建序列,等价于上面语句

CREATE SEQUENCE user_id_seq;
DROP TABLE IF EXISTS "user";
CREATE TABLE "user"(
	"id" int8 NOT NULL DEFAULT nextval('user_id_seq'),
	"user_name" varchar(20 char) NOT NULL,
	"age" int4,
            	CONSTRAINT "user_pk" PRIMARY KEY (id);
);
ALTER SEQUENCE user_id_seq OWNED BY "user"."id";

2.序列类型与基本数据类型的对于

序列名普通类型内存大小自增序列范围
smallserialsmallint/int22字节1到32767
serialinteger/int44字节1到2147483647
bigserialbigint/int88字节1到9223372036854775807

3.序列函数

函数返回类型描述
currval(regclass)bigint返回最近一次用nextval获取的指定序列的值
lastval()bigint返回最近一次用nextval获取的任何序列的值
nextval(regclass)bigint递增序列并返回新值
setval(regclass, bigint)bigint设置序列的当前值
setval(regclass, bigint, boolean)bigint设置序列的当前值以及is_called标志

4.使用

例如:向1.1中的user表添加数据

insert into user("user_name","age") values("张三", 25);
insert into user("id","user_name","age") values(nextval('user_id_seq'),"李四", 22);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值