SQL-Oracle08sql序列和同义词

序列(重点)


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

CREATE SEQUENCE sequence
[INCREMENT BY n][START WITH n]
[{MAXVALUE n|NOMAXVALUE}]
[{MINVALUE n|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE n|NOCACHE}];
eg:创建一个myseq的序列,验证自动增长的操作。

 

CREATE SEQUENCE myseq ;
序列创建完成之后,所有的自动增长应该由用户自己处理,
所以在序列中提供了一下的两种操作:
 nextVal:取得序列的下一个内容
 currVal:取得序列的当前内容
eg:建立一张表,验证序列的操作。

CREATE TABLE testseq(
  num1   NUMBER ,
  curr NUMBER
);
  下面向表中添加数据,添加数据的时候需要手工使用序列

eg:

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

将以上的序列执行5次。

eg:查询表testseq,观察序列的变化。
SELECT * FROM testseq ;
从结果中发现,nextval的值始终在进行自动增长的操作,
而curr使用取出当前操作的序列结果。
也就是说,现在的这种序列,每次增长的幅度是1,那么也可以修改序列的增长幅度。
  可以使用以下参数:
 每次的增长幅度:INCREMENT BY 长度
eg:重新建立序列
删除序列:DROP SEQUENCE myseq ;
重新创建序列:CREATE SEQUENCE myseq INCREMENT BY 2 ;

此时,序列已经正常的创建,创建之后来测试一下,序列的操作,
重新创建testseq表,为了可以说明问题,现在将testseq表重新建立

重新执行数据的插入操作,插入5次数据
INSERT INTO testseq(next,curr) VALUES (myseq,nextval,myseq,currval) ;

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

默认情况下,序列从1开始的,那么可以使用START WITH
CREATE SEQUENCE mysql 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

-----------
===========
同义词(了解)

之前一直存在这样的一种查询语句:
SELECT SYSDATE FROM dual;
  之前一直强调,dual是一张虚拟表,那么此表在哪定义的呢?

如果现在使用system连接数据库,查询一下此张表是否属于system用户。
CONN system/manager ;
SELECT * FROM tab;

SELECT * FROM tab WHERE TNAME='DUAL' ;
 通过此用户没有找到dual表,那么system用户呢?

CONN sys/change_on_install AS SYSDBA ;
SELECT * FROM tab WHERE TNAME='DUAL' ;


 在sys用户下存在此表,但是再scott用户下却可以直接通过表名称访问,
那么正常情况下如果访问不同用户的表需要使用“用户名.表名称”。
 那么此时,实际上就是同义词的作用。同义词,可以让其他用户通过一个表名称
方便的访问“用户名.表名称”.
创建同义词的语法:
CREATE SYSONYM 同义词名称 FOR 用户名.表名称 ;
eg:将scott.emp定义为emp的同一词。
CREATE SYSNOYM emp FOR scott.emp ;
show user ;


删除一个同义词:
DROP SYSNONYM 同义词名称 ;
eg:删除emp的同义词
DROP SYSNONYM emp;
  但是,此种特性只适合于Oracle数据库。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值