下面阐述由MySQL的AUTO_INCREMENT如何转换为人大金仓数据库不能使用MySQL的AUTO_INCREMENT来添加数据库自动自增。人大金仓数据库有自己的自增序列方法。
人大金仓定义了三种序列类型分别是smallserial、serial、bigserial,他们分别对应的为int2,int4,int8类型。
创建自增序列
例如:在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); );
手动创建序列,等价于上面语句
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";
序列类型与基本数据类型的对于
序列名 | 普通类型 | 内存大小 | 自增序列范围 |
---|---|---|---|
smallserial | smallint/int2 | 2字节 | 1到32767 |
serial | integer/int4 | 4字节 | 1到2147483647 |
bigserial | bigint/int8 | 8字节 | 1到9223372036854775807 |
序列函数
函数 | 返回类型 | 描述 |
currval(regclass) | bigint | 返回最近一次用nextval获取的指定序列的值 |
lastval() | bigint | 返回最近一次用nextval获取的任何序列的值 |
nextval(regclass) | bigint | 递增序列并返回新值 |
setval(regclass, bigint) | bigint | 设置序列的当前值 |
setval(regclass, bigint, boolean) | bigint | 设置序列的当前值以及is_called标志 |
使用
例如:向1.1中的user表添加数据
insert into user("user_name","age") values("张三", 25); insert into user("id","user_name","age") values(nextval('user_id_seq'),"李四", 22);
本文由 admin 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:2024-03-09 09:39:49