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://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
- 点赞
- 收藏
- 分享
- 文章举报
- 常用数据库的自增字段创建方法汇总_DB2_Oracle_MySQL_PostgreSQL_SQL Server_Sybase
- JDBC连接DB2、Oracle、MySQL、PostgreSQL
- oracle创建与mysql的dblink
- jdbc -- 001 -- 一般方式创建数据库连接(oracle/mysql)
- 在ORACLE中创建自增字段,sequence
- JSP 连接各类数据库大全(Oracle,MSSQL,DB2,Informix,SyBASE,MYSQL,PostgreSQL)
- BigBlueButton mysql修改为postgresql or oracle
- 选择 PostgreSQL, MySQL, Oracle 数据库我之见
- oracle创建sequence
- 在ORACLE中创建自增字段,sequence
- 异常 SQLErrorCodes loaded: [DB2, Derby, H2, HSQL, Informix, MS-SQL, MySQL, Oracle, PostgreSQL, Sybase]
- oracle创建sequence和触发器trigger
- dblinq2007 LINQ provider for Oracle, PostgreSQL, MySQL, Ingres, SQLite, Firebird and ... SQL Server (C# 3.0)
- 【搜索引擎】Solr最新安装以及通过关系型数据库(MySQL,Oracle,PostgreSQL)导入数据
- Oracle创建SEQUENCE
- oracle与mysql创建表时的区别
- mysql通过表和function模拟oracle的sequence
- PostgreSQL、oracle、MySQL比较
- MySql中实现类似Oracle的Sequence方案
- Oracle,SQLServer,Mysql,PostgreSQL数据库查询前10条比较