7.序列(重点)
在很多数据库系统中都寻在一个自动增长的列,如果要想在Oracle中完成自动增长只能依靠序列完成,所有的自动增长操作,需要用户手工完成处理。
创建序列
创建序列的语法格式为:
CREATE SEQUENCE 序列名
[INCREMENT BY n]
[START WITH n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
1)INCREMENT BY用于定义序列的步长,如果省略,则默认为1,如果出现负值,则代表Oracle序列的值是按照此步长递减的。
2)START WITH 定义序列的初始值(即产生的第一个值),默认为1。
3)MAXVALUE 定义序列生成器能产生的最大值。选项NOMAXVALUE是默认选项,代表没有最大值定义,这时对于递增Oracle序列,系统能够产生的最大值是10的27次方;对于递减序列,最大值是-1。
4)MINVALUE定义序列生成器能产生的最小值。选项NOMAXVALUE是默认选项,代表没有最小值定义,这时对于递减序列,系统能够产生的最小值是?10的26次方;对于递增序列,最小值是1。
5)CYCLE和NOCYCLE 表示当序列生成器的值达到限制值后是否循环。CYCLE代表循环,NOCYCLE代表不循环。如果循环,则当递增序列达到最大值时,循环到最小值;对于递减序列达到最小值时,循环到最大值。如果不循环,达到限制值后,继续产生新值就会发生错误。
6)CACHE(缓冲)定义存放序列的内存块的大小,默认为20。NOCACHE表示不对序列进行内存缓冲。对序列进行内存缓冲,可以改善序列的性能。
范例:创建一个myseq的序列,验证自动增长的操作
序列创建完成以后,所有的自动增长应该有用户自己处理,所以在序列中提供了以下两种操作:
nextVal:取得序列下一个内容
currVal:取得序列的当前内容
范例:建立一张表,以验证序列的操作
下面向表中添加数据,需要手工使用序列
范例:使用序列
将以上的语句执行五次,观察序列变化
从结果中发现,nextVal的内容式中在进行自动增长的操作,而curr使用取出当前操作的序列结果。也就是说现在这种序列,每次增长的幅度是1,那么也可以修改增长幅度。使用以下参数:
每次增长幅度:INCREMENT BY 长度;
范例:重新建立序列(先删,后建)
序列已经正常创建,现在重建testseq表,并插入数据
增幅变成了2。默认情况序列是从1开始的,可以使用START WITH指定
还可以设定最大最小值,是否是循环
范例:创建一个序列,让其取值固定在1、3、5、7、9循环
可以使用PLSQL工具
从这里拷贝代码即可。
得到结果:
从实际来看序列使用最多的语法:CREATE SEQUENCE序列
2)删除序列
DROP SEQUENCE 序列名;
8.同义词(了解)
之前用过这样的语句:SELECT SYSDATE FROM dual;
dual是一个虚拟表,那么这个表是在哪里定义的呢?
现在是有system链接数据库,看看此表示是否属于system用户
通过system用户没有查到这个表,下面试试超级管理员:
在sys用户下存在此表,此表在sys下,但是scott用户可以直接通过表名称访问,那么正常情况下要访问不同用户的表需要使用"用户名.表名称"。实际上这就是同义词的作用,同义词可以让其他用户通过一个名称方便的访问"用户名.表名称"。
创建同义词的语法:
CREATE SYNONYM 同义词名称 FOR 用户名.表名称;
范例:将scott.emp定义emp的同义词
这样就可以在非scott用户的情况下直接查询emp表了
删除同义词:
DROP SYNONYM 同义词名称;
注意:此种特性只适用于Oracle数据库。