ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 21、序列、同义词

21、序列、同义词

原创 Linux操作系统 作者:XJ43250 时间:2009-11-27 11:06:53 0 删除 编辑

1、            序列

在很多数据库系统中都存在一个自动增长的列,如果现在要想在Oracle中完成自动增长的功能,则只能依靠序列完成,所有的自动增长操作,需要用户手工完成处理。

序列的创建格式:

CREATE SEQUENCE sequence

[INCREMENT BY n][START WITH n]

[{MAXVALUE n | NOMAXVALUE}]

[{MINVALUE n | NOMINVALUE}]

[{CYCLE|NOCYCLE}]

[{CACHE n|NOCACHE}];

范例:创建一个myseq的序列,验证自动增长的操作。     

CREATE SEQUENCE myseq;

       序列创建完成之后,所有的自动增长应该由用户自己处理,所以在序列中提供了以下的两种操作:

       ·nextVal:取得序列的下一个内容

       ·currVal:取得序列的当前内容

范例:建立一张表以验证序列的操作

CREATE TABLE testseq(

       next NUMBER,

       curr NUMBER

);

       下面向表中添加数据,添加数据的时候需要手工使用序列

范例:使用序列

INSERT INTO testseq(next,curr) VALUES(myseq.nextval,myseq.currval);

       将以上的语句执行5次。

范例:查询testseq表,观察序列的变化

SELECT * FROM testseq;

       从结果中发现,nextval的内容始终在进行自动增长的操作,而curr使用取出当前操作的序列结果。也就是说,现在的这种序列,每次增长的幅度是1,那么也可以修改序列的增长幅度。

       可以使用以下的一个参数:

              ·每次的增长幅度:INCREMENT BY 长度

范例:重新建立序列

删除序列:DROP SEQUENCE myseq;

重新创建序列:CREATE SEQUENCE myseq INCREMENT BY 2;

       此时,序列已经正常的创建,创建之后来测试一下,序列的操作,重新创建testseq表

DROP TABLE testseq;

CREATE TABLE testseq(

       next NUMBER,

       curr NUMBER

);

       重新执行数据的插入操作,插入5次数据:

INSERT INTO testseq(next,curr) VALUES(myseq.nextval,myseq.currval);

       从序列的结果来看,每次取的都是奇数。

       默认情况下,序列从1开始的,那么可以使用START WITH指定其开始的位置。

DROP SEQUENCE myseq;

CREATE SEQUENCE myseq INCREMENT BY 2 START WITH 10;

       序列的开始位置是10,以后直接从10开始进行序列的计算。

       下面重新创建一个序列,让其取值固定在1、3、5、7、9,循环序列。

DROP SEQUENCE myseq;

CREATE SEQUENCE myseq MAXVALUE 10 INCREMENT BY 2 START WITH 1

CACHE 2 CYCLE;

       重新建立testseq表,插入数据,以测试最终的结果,可以发现序列的内容现在是循环的操作。

       但是从实际来看,序列使用最多的语法:CREATE SEQUENCE 序列名称。

2、            同义词

之前一直存在这样的一种查询语句:

SELECT SYSDATE FROM dual;

       之前一直强调,dual是一张虚拟表,那么虽然是虚拟表,可是此表到底是在哪里定义的?

如果现在使用system连接数据库,查询一下此张表是否属于system用户。

CONN system/manager;

       通过此用户没有查找到dual表,那么sys用户呢?

CONN sys/xujing AS SYSDBA;

       在sys用户下存在此表。此表在sys下,但是在scott用户下却可以直接通过表名称访问,那么正常情况下如果要访问不同用户的表需要使用“用户名.表名称”。

       那么此时,实际上就是同义词的作用。同义词,可以让其他用户通过一个名称方便的访问“用户名.表名称”。

创建同义词的语法:

CREATE SYNONYM 同义词名称 FOR 用户名.表名称;

范例:将scott.emp定义emp的同义词

CREATE SYNONYM emp FOR scott.emp;

 

如果要删除一个同义词,可以使用如下的语法:

DROP SYNONYM 同义词名称;

范例:删除emp的同义词

DROP SYNONYM emp;

       但是,此种特性只适合于Oracle数据库。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21817401/viewspace-620800/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 20、视图
请登录后发表评论 登录
全部评论

注册时间:2009-11-17

  • 博文量
    15
  • 访问量
    12817