您的位置:首页 > 数据库 > Oracle

postgresql、mysql、oracle创建sequence

2020-02-07 14:57 826 查看

postgresql数据库创建自动增长序列:

create SEQUENCE seq_test
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 1
CACHE 1;

注释:

INCREMENT 每次增加多少
MINVALUE 最小值
MAXVALUE 最大值
START 开始值
CACHE 表示每次只能生成一个数值,没有缓冲

其他命令:

删除序列:DROP SEQUENCE seq_test;
查询获取序列的下一个值:select nextval('seq_test');
查询获取序列的当前值:select currval('seq_test');

mysql数据库创建自动增长序列:

1.创建sequence表

CREATE TABLE tbl_sequence (
seq_name VARCHAR (50) NOT NULL,
minvalue INT NOT NULL,
maxvalue_val INT NOT NULL,
current_val INT NOT NULL,
increment_val INT DEFAULT '1' NOT NULL,
PRIMARY KEY (seq_name)
) ENGINE = MyISAM DEFAULT CHARSET = utf8;

2.创建索引

分别对应:seq_name-序列名称,minvalue-最小值,maxvalue_val-最大值,current_val-当前值,increment_val-增长步数
插入一条数据:

insert into tbl_sequence (seq_name, minvalue, maxvalue_val, current_val, increment_val) values ('seq_test', 1, 9223372036854775807, 1, 1);

3.创建function _nextval() 用于获取当前序列号

DELIMITER //
create function _nextval(name varchar(50))
returns integer
begin
declare _cur int;
declare _maxvalue bigint;  -- 接收最大值
declare _increment int; -- 接收增长步数
set _increment = (select increment_val from tbl_sequence where seq_name = name);
set _maxvalue = (select maxvalue_val from tbl_sequence where seq_name = name);
set _cur = (select current_val from tbl_sequence where seq_name = name);
update tbl_sequence                      -- 更新当前值
set current_val = _cur + increment_val
where seq_name = name ;
if(_cur + _increment >= _maxvalue) then  -- 判断是都达到最大值
update tbl_sequence
set current_val = minvalue
where seq_name = name ;
end if;
return _cur;
end;
//
DELIMITER ;

5.查询获取序列的下一个值

select _nextval('seq_test');

Oracle数据库创建自动增长序列:

create SEQUENCE seq_test
MINVALUE 1
MAXVALUE 9223372036854775807
START with 1
INCREMENT by 1
CACHE 20;

注释:

minvalue 1 --最小值,可以设置为0
maxvalue 9223372036854775807 --最大值
start with 1 --从1开始计数
increment by 1 --每次加几个
cache 20; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

其它命令:

currVal:返回 sequence的当前值
nextVal: 增加sequence的值,然后返回 增加后sequence值

select 用户.索引名.currVal from dual(用户名可省略)
select 用户.索引名.nextValfrom dual(用户名可省略)
select seq_test.currVal from dual;
select seq_test.nextVal from dual;
删除序列:DROP SEQUENCE seq_test;
修改序列:ALTER SEQUENCE 用户名.seq_test  MAXVALUE 9999999; (用户名可省略)

参考文献:

1.[mysql]:http://www.cnblogs.com/wanggangblog/p/4037543.html
2.[mysql]:https://www.geek-share.com/detail/2693972459.html
3.[oracle]:https://www.cnblogs.com/ZiyuanZhu/p/5976580.html
4.[postgresql]:https://www.cnblogs.com/erxiaoouba/p/9075592.html
5.[postgresql]:http://www.jsjtt.com/shujuku/postgresql/32.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
孤山枫雨 发布了10 篇原创文章 · 获赞 0 · 访问量 1168 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: