创建即将使用的表

create table supplier
(s_codde number(6),
sname varchar2(25),
contact varchar2(15),
phone varchar2(15),
fax varchar2(15)); 

序列号的特点

  1. 可以由多个用户共享的数据库对象.
  2. 序列号生产机器,专为表中的数据自动产生序列号.
  3. 由oracle内部例程产生和维护.
  4. 独立于使用它的表.
  5. 通常是用来产生主键
  6. 可以取代生产序列号的应用程序.
  7. 如果让它常驻内存,可以提高访问序列号的效率.

创建序列号的语法

CREATE SEQUENCE 序列号名字 
[START WITH n] [INCREMENT BY n] 
[{MAXVALUE n | NOMAXVALUE}] 
[{MINVALUE n | NOMINVALUE}]
[{CACHE n | NOCACHE}]
[{CYCLE n | NOCYCLE | CYCLE 20}];
其中:
  1. 序列号的名字::序列号产生器的名字, 也即是该序列的名字
  2. START WITH n:定义了所产生的第一个序列号码,这里 n 为整数。如果该字句省略,那么序列就从1开始
  3. INCREMENT BY n : 定义了序列号增加的步长(序列号之间的间隔,当前序列号与下一个序列号之间的差),如果该字句省略,序列号增加步长为1.
  4. MAXVALUE n :定义了该序列号可产生的序列号的最大值
  5. NOMAXVALUE : 说明升序的序列号的最大值为 10的27次方。而降序的序列号的最大值为 -1 (这也是默认值)。
  6. MINVALUE :定义了可产生序列号的最小值。
  7. NOMINVALUE : 说明升序序列号的最小值为1,而降序的序列号的最小值为负10的26次方(这也是默认值)。
  8. CACHE n :说明将有n个序列号码被oracle 服务器预分配和保存在内存中。
  9. NOCACHE:说明没有序列号被oracle服务器预分配和保存在内存当中。
  10. CACHE20:这是默认值。不需要说明。
  11. CYCLE n:说明在序列号达到最大或最小值后,将继续产生序列号。
  12. NOCYCLE:说明在序列号达到最大或最小值之后,将不再产生序列号(这也是默认值)。
该语句也是 DDL 语句。DDL语句是用于定义或管理数据库对象的语句。

使用

创建序列号

create sequence supplier_s_codestart with 2000INCREMENT by 10maxvalue 100000nocachenocycle;

该语句意思为:从2000开始,步长为 10 最大值为 100000, 没有预分配,最大值之后不在产生序列号

查看序列号信息

 SELECT * FROM user_sequences;

如果想查看当前序列号的值,与序列号下一次的值,可以利用SELECT 语句 加2个位列来查询。NEXTVAL 以及 CURRVAL

  1. NEXTVAL:返回序列号下一次可获得的值
  2. CURRVAL:返回序列号当前的值
使用 CURRVAL时需要注意,在使用之前,必须在当前会话(账号下)使用过 NEXTVAL产生一个序列号的值,或者曾经使用过该序列号产生过值。否则会出现错误。

使用序列号插入数据

 INSERT INTO supplier(s_codde, sname, contact, phone, fax)VALUES(supplier_s_code.nextval, '仙客来百货','张根发', 4444944, 4444844);

提示插入成功,那么现在可以使用 CURRVAL 来获取序列当前的值了。

SELECT supplier_s_code.currval FROM dual

建立新的序列。
CREATE SEQUENCE ord_ordno START WITH 1 INCREMENT BY 1 MAXVALUE 10000 NOCYCLE

通过查询序列或发现,该序列号与上一个序列号之间有不同之处,


上一个序列号因为使用了 NOCACHE 所以oracle为分配缓存任何序列号值,而这次建立的序列号在建立的时候为使用 NOCACHE 所以oracle默认缓存了20个序列值。
orcle建议,在建立序列的时候尽量少了 NOCYCLE 。
利用 CREATE SEQUENCE 语句的 CACHE n 子句来说明让oracle计算出 n 个序列号码,并将它们放入内存当中,在一定程度上能加快访问的速度。但是假如这个序列为共享的序列(多个用户在使用)的话,那么有可能某一个用户获得的序列号码是有间隔的,并不是连贯性的。
使用该子句的话 oracle 做的操作包括
  1. 第一次引用这个序列时,oracle计算出 n 个序列号码,并将它们放入内存当中。
  2. 每一个要求下一个序列号码的请求,都将从内存中的序列号码中得到。
  3. 当内存中的最后一个序列号码用完之后,假如又收到下一个获取序列号请求时,oracle服务器再次计算出 n 个序列号并将它们放入内存当中。
当我们在使用序列的时候,比如插入,更新当中使用了序列,那么不管插入、更新是否成功,只要使用了序列,那么当前序列的值就会消失,再次使用时就会是下一个序列的值。有3点,当使用序列号的事物被回滚,另外的表使用序列时,系统奔溃时,序列会丢失。

NEXTVAL 和 CURRVAL伪列的使用规则。

使用规则

  1. 序列必须先定义才能使用 NEXTVAL,CURRVAL。
  2. 使用伪列 NEXTVAL 时会产生下一个新的序列号码,并将该序列号码放入 CURRVAL 伪列当中。
  3. 使用伪列 CURRVAL 可以获取当前序列的系列号码,使用之前必须在当前会话当中使用过 NEXTVAL 伪列产生过一个序列值。

使用场景

可使用场景
  1. 查询语句的 SELECT 子句中,但不包括子查询的 SELECT 子句。
  2. 在 UPDATE 语句的 SET 子句当中。
  3. 在 INSERT 语句中的子查询的 SELECT 列表中。
  4. 在 INSERT 语句的 VALUES 子句中。
不能使用的场景
  1. 视图的 SELECT 子句中,
  2. 在 SELECT 语句的子查询中。
  3. 在 UPDATE 语句的子查询当中。
  4. 在 DELETE 语句的子查询中。
  5. 在包含 DISTINCT 关键字的查询 SELECT 语句中。
  6. 在包含 ORDER BY 子句的查询 SELECT 语句中。
  7. 在包含 GROUP BY 子句的查询 SELECT 语句中。
  8. 在包含 HAVING 子句的查询 SELECT 语句中。
  9. 在包含 DEFAULT 表达式的 CREATE TABLE 语句中。
  10. 在包含 DEFAULT 表达式的 ALTER TABLE 语句中。

序列的修改

修改序列号的语法跟创建序列的语法差不多,只不过 CREATE SEQUENCE 要变成 ALTER SEQUENCE,并且去掉了 START WITH 子句。
修改序列要注意几点:
  • 必须要有 ALTER ANY SEQUENCE 系统权限。
  • 不能修改 START WITH 选项,如果一定要修改,只能删掉序列,重新创建。
  • ALTER SEQUENCE 只能影响以后的序列号码。
  • 修改后的 MAXVALUE 不能小于序列号当前的值。比如当县序列号的值为 1000 ,那么久不能修改 MAXVALUE 的值为 999。

删除序列号

语法:
DROP SEQUENCE 序列号名

同义词

在世纪工作中,我们经常会碰到一些表名称很长的表,这个时候如果需要对该表进行查询的话,那么每一次查询都需要输入一次这个很长的表名,这无疑会使人感到很郁闷,那么oracle的同义词就能帮我们解决这个问题。
比如我们查询一个表,表名比较长
SELECT * FROM supplier

有了同义词之后可以这样

SELECT * FROM s

创建同义词

语法:
CREATE [PUBLIC] SYNONYM 同义词名字 FOR 对象名
  • PUBLIC:使用了该字段的话,那么表明所有用户都可以访问这个同义词
  • 对象名:创建的同义词基于的对象名。比如我们要为 supplier 表创建同义词,那么对象名就是该表名。
创建同义词需要注意的是,所基于的对象下个不能包含在任何软件包中。而且一个私有的同义词不能与当前用户下的任何同义词重名。而且必须要有创建同义词的
可以通过 user_synonym 表来查询相关的同义词信息。
创建同义词
 CREATE SYNONYM s FOR supplier;

查询同义词信息

 CREATE SYNONYM s FOR supplier;

通过同义词来查询真是的表数据

 SELECT * FROM s

可以看到 通过同义词,我们查询到了真是的 supplier 表中的数据。

因为没有使用 PUBLIC 字段,所以切换到别的用户的时候,我们无法使用该同义词。但是可以使用另外的方法来使用,比如该同义词属于 SCOTT 用户,那么在别的用户下面我们可以使用 SCOTT.s 来使用该同义词。
oracle没有提供修改同义词的方法,如果想要修改 ,只能删除之后重新建立同义词。

删除同义词

DROP SYNONYM 同义词名称

oracle序列号、相关推荐

  1. oracle序列号的使用

    oracle序列号的使用 1.查询下一个序列号 select SEQ_USER.nextval from dual 2.在插入新数据时,生成唯一的id值 insert into user(id,nam ...

  2. oracle序列号查询最大值,Oracle sequence值到了最大值的处理

    序列是oracle提供的用于生成一系列唯一数字的数据库对象,序列会自动生成顺序递增的序列号,以实现自动提供唯一的主键值,系列可以在多个用户并发环境中使用,并且可以为所有用户生成不重复的顺序数字,而不需 ...

  3. oracle 序列号同步,关于序列同步的问题

    在使用oracle数据库时,当给一个表设置自增字段时,我们经常会使用到序列+触发器来完成.但当你需要对数据库进行导入导出时,序列很容易出问题. 当你将数据库导出后,导入到另一个数据时,你会发现另一个数 ...

  4. 查看 oracle 序列号 用户名,查看oracle用户执行的sql语句历史记录

    一时失误,删除了PL/SQL窗口数据的历史,然后半个半个星期写的代码全部白费,但是想起来之前执行过,所以可以通过查询历史记录找回.以下为找回代码: 平时用得少,保存一下以后查看. select * f ...

  5. Oracle序列号详解

    例1:创建序列:CREATE SEQUENCE ABC INCREMENT BY 1 START WITH 1 MAXVALUE 9999999999 NOCYCLE NOCACHE; 语法详解CRE ...

  6. oracle中的CURRVAL和NEXTVAL用法(sequence是序列号生成器)

    1.什么是sequence?其作用是什么? 在Oracle数据库中,什么是序列呢?其中的作用是什么呢?其实sequence是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字 ...

  7. plan explorer mysql_plan explorer支持oracle吗

    展开全部 1.SQL语句的执行62616964757a686964616fe58685e5aeb931333361326365计划 使用EXPLAIN PLAN语句来确定Oracle数据库下指定SQL ...

  8. lsdyna如何设置set中的node_list_详解MySQL数据库如何实现类似Oracle的序列?

    概述 众所周知,Oracle一般使用序列(Sequence)来处理主键字段,而MySQL则提供了自增长(increment)来实现类似的目的. 不过小编在实际使用过程中发现,MySQL的自增长有诸多的 ...

  9. (转)oracle中的CURRVAL和NEXTVAL用法

    转自:http://blog.csdn.net/qianyiyiding/article/details/51592689 1.什么是sequence?其作用是什么? 在Oracle数据库中,什么是序 ...

最新文章

  1. C++编程思想重点笔记(上)
  2. Linux快速格式化T级硬盘并挂载
  3. 旧文重发:做人、做事,做架构师——架构师能力模型解析
  4. 恶心的C语言strtok函数
  5. linux gcc常用编译选项总结
  6. gcc,cc,g++,CC的区别
  7. uva 11572 ——Unique Snowflakes
  8. python中popen的用法_python中的subprocess.Popen()使用
  9. 使用Visual Studio.net调试javascript最方便的方法
  10. 微信开发的时候自定义菜单
  11. 英语学术论文简短语句摘抄
  12. 流年似水 启航2019
  13. MyBatis crud练习
  14. win10 + ubantu双系统 彻底删除Ubantu
  15. 华文慕课计算机组成结构第二章课后习题解析
  16. 根据E-R图设计数据库表
  17. nginx反向代理实现二级域名转一级域名
  18. 最近 Github 上爆火的 Chrome 生产力神器 Omni 是什么鬼?
  19. 解决开发qq音乐singer-detail组件时子路由跳转失败问题
  20. back track 5 / BT5 默认用户名密码

热门文章

  1. 飞鸟如何去爱,才能爱上水里的鱼?
  2. 模拟磁盘调度 课程设计(操作系统 C语言)
  3. 2020年日历_2020年日历表打印版下载|2020年日历表 打印版 下载 - 巴士下载站
  4. mysql的字符串等于函数吗_MySQL函数的字符串函数
  5. i7 10875h和i7 9750h对比差距大吗
  6. java 监听客户端的退出_Java socket 服务端如何监控客户端异常关闭?
  7. Hikvison对接NVR实现WEB无插件开发包实现前端视频预览(html、vue、nginx代理)
  8. Relief特征提取算法实战
  9. Java回顾-String/StringBuilder/StringBuffer
  10. 江浙沪地区计算机考研高效排名,江浙沪地区,哪所大学的法硕容易考上?