设为首页 收藏本站
查看: 967|回复: 0

[经验分享] SQL-Oracle08sql序列和同义词

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-1-9 09:11:49 | 显示全部楼层 |阅读模式
序列(重点)


在很多数据库系统中都存在一个自动增长的列,如果现在要想在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数据库。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-13686-1-1.html 上篇帖子: SQL-Oracle08sql视图 下篇帖子: 修改有数据oracle字段类型 从number转为varchar 同义词
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表