数据库序列

一、Oracle数据库

1、创建序列

SQL> CREATE SEQUENCE name [INCREMENT BY n] 
[START WITH n] [{MAXVALUE n | NOMAXVALUE}] 
[{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] 
[{CACHE n | NOCACHE}] 


2、查询序列

(1)查询下一个将要使用的序列

select SEQ_NAME.nextval from dual

(2)查询当前序列

select SEQ_NAME.currval from dual

使用这条语句的时候要特别注意,因为在使用currval之前,必须先使用nextval,否则就会异常;而且,必须在同一个连接内,先使用nextval之后,才能使用currval。如果使用了nextval,然后断开了连接;重新连接后使用currval仍然会异常。

(3)查询序列详细信息(Oracle对于不同用户创建的Sequence是隔开的,所以也可以不用传入用户名)

select SEQUENCE_OWNER,SEQUENCE_NAME from dba_sequences where sequence_owner='用户名';
  •  Oracle将sequence的定义存储在数据字典之中。
  •  Sequence是独立于事务的,就是说序列的增加不需要等待事务的完成,也就是说序列是异步于事务而增长的。这说明,你访问不到别的用户使用该sequence产生的值,也就是说你只能访问到你当前产生的值,即使其他用户已经增加了sequence的值;还说明如果事务回滚,sequence不会回滚,它所发生的改变是一维的。

3、更改序列

SQL> ALTER SEQUENCE sequence [INCREMENT BY n] [{MAXVALUE n | NOMAXVALUE}] 
[{MINVALUE n | NOMINVALUE}] 
[{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]; 

注意: 不能改变它的起始值(但是有其他的方法实现这一功能,参见最后Oracle和DB2差异比较)
如果要改变序列的起始值, 先把序列号删除掉, 再新建一个。

4、删除序列

SQL>DROP SEQUENCE sequence;

5、Oracle数据字典

  • 数据字典表所有者是sys用户,其数据字典表和数据字典视图都保存在system表空间中。除sys用户,任何用户(包括DBA)都不能直接更改数据字典,但可以查询其中的信息,即数据字典是只读的。
  • 数据字典分为静态数据字典和动态数据字典。
  • 静态数据字典:是指在用户访问数据字典时内容不会发生改变,这类数据字典主要是由表和视图组成,数据字典中的表是不能被直接访问的,但是可以访问数据字典中的视图,静态数据字典中的视图分为三类,分别有三个前缀构成:user_*,all_*,dba_*。
  • 动态数据字典:Oracle包含了一些潜在的由系统管理员如SYS维护的表和视图,由于数据库运行时它们会不断更新,因此称它们为动态数据字典。

二、DB2数据库

1、创建序列

 CREATE SEQUENCE <sequence-name> 

                 AS data-type                           默认 As Integer
              START WITH <numeric-constant>   
          INCREMENT BY <numeric-constant>               默认 INCREMENT BY 1
           MINVALUE <numeric-constant> | NO MINVALUE    默认 NO MINVALUE
           MAXVALUE <numeric-constant> | NO MAXVALUE    默认 NO MAXVALUE
           NO CYCLE | CYCLE                             默认 NO CYCLE
           CACHE <numeric-constant> | NO CACHE          默认 CACHE 20
           NO ORDER | ORDER                             默认 NO ORDER

2、查询序列

(1)查询下一个将要使用的序列

select nextval for seq_name from sysibm.sysdummy1;

(2)查询当前序列

select prevval for seq_name from sysibm.sysdummy1;

(3)查询序列详细信息(当前用户,current user表示当前连接的用户,相当于内置变量)

SELECT * FROM syscat.sequences where SEQSCHEMA = current user;

 3、更改序列

同Oracle,需以DB2语法

4、删除序列

同Oracle

三、Oracle与DB2的差异

除语法差异,以及查询差异外,这里主要讲一个重设开始值的差异

  •  ORACLE:取得下一个值;先设置步长(下一个值 与 设置的开始值之间差);取得下一个值;再把步长修改成原来值 。
  •  DB2:ALTER SEQUENCE 序列名  RESTART WITH 下一值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值