oracle序列可以创建同义词吗,Oracle之序列及同义词

本文详细介绍了Oracle数据库中的序列(Sequence)功能,包括如何创建、使用和修改序列,以及序列的自动增长、增幅、起始值等属性。此外,还探讨了同义词(Synonym)的概念,它是如何允许用户通过一个名称方便地访问其他用户下的表,以及如何创建和删除同义词。通过实例展示了如何在实际操作中应用这些概念。
摘要由CSDN通过智能技术生成

3.2序列(重点)      在很多数据库系统中都存在一个自动增长的列,如果要在Oracle中完成自动增长的   功能,则只能依靠序列完成,所有的自动增长操作,需要用户手工完成处理   序列的创建格式:   CREATE SEQUENCE sequence   [INCREMENT BY n][START WHIT n]   [{MAXVALUE n|NOMAXVALUE}]   [{MINVALUE n|NOMINVALUE}]   [{CYCLE|NOCYCLE}]   [{CACHE n|NOCACHE}]   我们先从基本的开始创建   范例:创建一个基本序列;   CREATE SEQUENCE myseq;序列已创建   序列创建完成之后,所有的自动增长应该由用户自己处理,所以在序列中提供了一下的操作;   nextVal:下一个值   currVAL:当前序列值   创建一个序列测试表   范例:   CREATE TABLE testseq(    next NUMBER,    curr NUMBER   );   添加数据,手工使用序列    INSERT INTO testseq(next,curr)VALUES(myseq.nextval,myseq.currval);    执行上述语句5次    然后观察    SELECT * FROM testseq;    从结果中发现,nextval的内容始终在进行自动增长的操作,而currval使用取出    当前操作的序列结果,也就是现在这种序列,每次的增幅是1.此时我们想    更改增幅 可以使用以下的一个参数    每次的增长幅度:[INCREMENT BY n]    范例:重新建立序列(不能使用CREATE OR REPLACE命名)    只能先删除重新创建序列    删除序列: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);    然后查询    SELECT * FROM testseq;    从结果可以得知 现在的序列是以2为增幅增长    默认情况下,序列是从1开始的,那么可以使用[START WITH n]    重新创建序列,让他从10开始增幅    DROP SEQUENCE myseq;    CREATE SEQUENCE myseq INCREMENT BY 2 START WITH 10;    执行上面的测试表的操作    DROP TABLE testseq;    CREATE TABLE testseq(    next NUMBER,    curr NUMBER    );    INSERT INTO testseq(next,curr)VALUES(myseq.nextval,myseq.currval);    (同样的操作只要打/按回车即可)    然后再查询结果    SELECT * FROM testseq;    结果如我们期待的那样,默认的开始值1被替换成10了。    范例:下面重新创建一个序列,让其取值固定在1,3,5,7,9循环的序列号    DROP SEQUENCE myseq;    CREATE SEQUENCE myseq MAXVALUE 10 START WITH 1 INCREMENT BY 2     CACHE 2 CYCLE;    执行上面的测试表的操作    DROP TABLE testseq;    CREATE TABLE testseq(    next NUMBER,    curr NUMBER    );    INSERT INTO testseq(next,curr)VALUES(myseq.nextval,myseq.currval);    出入多次后观察结果,发现序列的内容现在是循环的操作,但是从实际来看    序列使用最多的语法,CREATE SEQUENCE 序列名称。        3.3同义词(了解只适合Oracle数据库)     之前一直存在这样的一种查询语句:     SELECT SYSDATE FROM DUAL;(查询系统信息)     之前一直强调DUAL是一张虚拟表,那么虽然是虚拟表,可是此表到底是     在哪里定义的呢?     如果现在使用system连接数据库,查询一下此表是否属于system     切换用户     CONN system/magager(安装完数据库时候设置的密码)     SELECT * FROM TAB WHERE TNAME='DUAL';     查询所有表查无dual;     我们在进入超级管理员sys用户中查询:     CONN sys/change_on_install AS SYSDBA;     SELECT * FROM TAB WHERE TNAME='DUAL';     在sys下存在此表     但是我在scott用户下能直接通过表名访问,正常情况下如果要访问不同用户     的表要使用“用户名.表名称”;     在sys用户下使用下列SQL语句     SELECT * FROM emp;     发生错误:表或则视图不存在     SELECT * FROM scott.emp;即可     可见DUAL实际上是通过同义词发挥了作用,同义词可以让其他用户通过一个     名称方便的访问“用户名.表名称”来访问其他用户下的表     CREATE SYNONYM 同义词名称 FOR 用户名.表名称;     范例:将scott用户下的emp表建立一个emp的同义词,然后在sys用户喜爱     通过同义词查询     CREATE SYNONYM emp FOR scott.emp;     SELECT * FROM emp;     可以完成查询     范例:删除emp的同义词     DROP SYNONYM emp;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值