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;
oracle序列可以创建同义词吗,Oracle之序列及同义词
最新推荐文章于 2024-06-05 17:22:10 发布
本文详细介绍了Oracle数据库中的序列(Sequence)功能,包括如何创建、使用和修改序列,以及序列的自动增长、增幅、起始值等属性。此外,还探讨了同义词(Synonym)的概念,它是如何允许用户通过一个名称方便地访问其他用户下的表,以及如何创建和删除同义词。通过实例展示了如何在实际操作中应用这些概念。
摘要由CSDN通过智能技术生成