postgresql、mysql、oracle创建sequence

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://blog.youkuaiyun.com/yuxiangaaaaa/article/details/53923508
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个

红包金额最低5元

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

抵扣说明:

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

余额充值