人大金仓自增序列替换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.序列类型与基本数据类型的对于
序列名 | 普通类型 | 内存大小 | 自增序列范围 |
---|---|---|---|
smallserial | smallint/int2 | 2字节 | 1到32767 |
serial | integer/int4 | 4字节 | 1到2147483647 |
bigserial | bigint/int8 | 8字节 | 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);