Oracle中,当需要建立一个自增字段时,需要用到sequence。sequence也可以在mysql中使用,但是有些差别,日后再补充,先把oracle中sequence的基本使用总结一下,方便日后查阅。

在oracle中sequence就是序号,每次取的时候它会自动增加。sequence与表没有关系。

1. Create Sequence

首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限。

创建语句如下:

CREATE SEQUENCE seqTest

INCREMENT BY 1 -- 每次加几个

START WITH 1 -- 从1开始计数

NOMAXvalue -- 不设置最大值

NOCYCLE -- 一直累加,不循环

CACHE 10; --设置缓存cache个序列,如果系统down掉了或者其它情况将会导致序列不连续,也可以设置为---------NOCACHE

说明:

minvalue:序列最小值

maxvalue/nomaxvalue:序列最大值/没有最大值

start with 1:序列从1开始

increment by 1:每次增加1

cache/nocache:nocache不缓存。cache缓存。开启缓存,效率高,只是如果数据库宕机了,缓存丢失,会出现序列跳号情况。

2.查看已有sequence:

select * from user_sequences;

Select * from all_sequences;

3.得到Sequence值

两种方式

① select last_number from user_sequences where sequence_name='SEQ_ON_USER';

② select SEQ_ON_USER.nextval from sys.dual;

定义好sequence后,你就可以用currVal,nextVal取得值。

CurrVal:返回 sequence的当前值

NextVal:增加sequence的值,然后返回 增加后sequence值

得到值语句如下:

SELECT Sequence名称.CurrVal FROM DUAL;

如得到上边创建Sequence值的语句为:

select seqtest.currval from dual

在Sql语句中可以使用sequence的地方:

- 不包含子查询、snapshot、VIEW的 SELECT 语句

- INSERT语句的子查询中

- INSERT语句的values中

- UPDATE 的 SET中

如在插入语句中

insert into 表名(id,name)values(seqtest.Nextval,'sequence 插入测试');

注:

- 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。

CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。

一次NEXTVAL会增加一次 SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。

- 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组 到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。

4.Alter Sequence

拥有ALTER ANY SEQUENCE 权限才能改动sequence. 可以alter除start至以外的所有sequence参数.如果想要改变start值,必须 drop sequence 再 re-create。

例:

alter sequence SEQTEST maxvalue 9999999;

另: SEQUENCE_CACHE_ENTRIES参数,设置能同时被cache的sequence数目。

5.Drop Sequence

DROP SEQUENCE seqTest;

6. 一个例子

create sequence SEQ_ID

minvalue 1

maxvalue 99999999

start with 1

increment by 1

nocache

order;

建解发器代码为:

create or replace trigger tri_test_id

before insert on S_Depart   --S_Depart 是表名

for each row

declare

nextid number;

begin

IF :new.DepartId IS NULLor :new.DepartId=0 THEN --DepartId是列名

select SEQ_ID.nextval --SEQ_ID正是刚才创建的

into nextid

from sys.dual;

:new.DepartId:=nextid;

end if;

end tri_test_id;

上面的代码就可以实现自动递增的功能了。

或者

  1. create or replace trigger "SEQ_ON_USER_GENERATOR" before
  2. insert on databasename1.T_USER for each row
  3. declare
  4. mid number,
  5. begin
  6. select SEQ_ON_USER.nextval into mid from dual;
  7. :new.id:=mid;
  8. end
  9. create trigger SEQ_ON_USER_Trigger
  10. before insert on T_USER for each row
  11. begin
  12. select SEQ_ON_USER.nextval into :new.id from dual;
  13. end SEQ_ON_USER_Trigger;

oracle创建自增序列相关推荐

  1. oracle创建自增序列并每日刷新

    oracle创建自增序列并每日刷新重新从1开始 --创建增长序列CREATE SEQUENCE ID_SEQINCREMENT BY 1 START WITH 1MINVALUE 0 NOCYCLE ...

  2. oracle 创建自增序列

    create sequence seq_sys_user minvalue 1 maxvalue 999999999999999999 start with 1 increment by 1 noca ...

  3. oracle修改seq为order,Oracle 创建和修改sequence

    Oracle  创建和修改sequence 在oracle中sequence就是所谓的序列号,每次取的时候它会自动增加,一般用在需要按序列号排序的地方. 1.Create Sequence 你首先要有 ...

  4. 如何实现 Oracle 的自增序列,两步轻松搞定

    在实际项目开发过程中,设计数据库表时经常遇到需要主键自增的场景.那如何实现Oracle的主键自增呢,这里我们记录一种最常用的方式:sequence + trigger. 就是利用Oralce的序号和触 ...

  5. oracle 创建表定义主键,Oracle 学习----:创建表(主键自增)

    一.创建表 create table testTable ( Id numbere, name varchar2(100), age number, createTime date, primary ...

  6. PostgreSQL:创建自增序列id,分区表,分区表子表

    文章目录 1)创建自增序列seq 2)创建分区表主表 3)创建分区表子表 4)分区表数据插入 5)分区表查询 1)创建自增序列seq CREATE SEQUENCE if not exists pub ...

  7. oracle有一百个人围一圈报数,案例:Oracle创建表时报session超过最大值 ORA-00018 证明递归ses...

    天萃荷净 创建表时报session超过最大值 证明递归session存在并不在v$session中显示 我们在数据库的使用过程中,有时候会遇到类似情况,我会话是登录的,但是我进行某种操作,缺报sess ...

  8. oracle创建数据库后干什么,手动创建Oracle数据库之前因后果

    对于许多数据库管理员来说,Oracle究竟是不是一个难以管理和驾驭的怪兽级数据库,会不会让他们管理生涯饱受折磨?当看到其命令行界面时,很多人会问这么一个问题. 如果你想通过一个应用程序操控使用这个数据 ...

  9. oracle创建数据库总结,oracle创建数据库和用户方法总结

    以前开发的时候用得比较多的是mysql和sql server,oracle用的比较少,用起来比较生疏,mysql和sql server用起来比较类似,就oracle的使用方式和他们不同,oracle在 ...

  10. oracle创建数据库、表空间、用户并授权

    oracle创建数据库.表空间.用户并授权 在安装完Oracle数据库软件之后可以使用默认的数据库orcl,也可以根据需要创建自定义的数据库.表空间用于对数据库中的资源进行分类,每个用户都有默认的表空 ...

最新文章

  1. 开源sk-dist,超参数调优仅需3.4秒,sk-learn训练速度提升100倍
  2. python实现洗牌算法_洗牌算法及 random 中 shuffle 方法和 sample 方法浅析
  3. PostgreSQL — Overview
  4. 面试:说说你对 HashMap 的认识?
  5. [linux内核][LINUX内核编程]学习笔记(一)
  6. 计算机科学班(原acm班),计算机科学创新实验班(以下简称ACM班)培养计划.doc
  7. 任务和特权级保护(一)——《x86汇编语言:从实模式到保护模式》读书笔记27
  8. SAP CRM One Order框架里旧式的索引表设计原理
  9. 1.关于python
  10. Windows下rocketmq mqnamesrv.exe 启动成功,但是mqbroker.exe启动失败
  11. 服气!蹭热点无敌,麦当劳发布“5G”新品:真香
  12. Linux学习笔记---使用BusyBox创建根文件系统(一)
  13. 语义分割之VOC2012、Cityscapes数据集介绍
  14. 微软VC/MFC FAQ(转)
  15. MySQL 中while loop repeat 的基本用法
  16. MOSSE相关滤波算法学习笔记
  17. Linux下使用clang-format格式化C++代码
  18. 《Fundamentals of Computer Grahpics》虎书第三版翻译——第一章 介绍
  19. 强烈推荐 :最用心的运营数据指标解读
  20. centos7安装大数据平台

热门文章

  1. win10桌面背景为什么突然变黑了 win10桌面背景不显示解决方法
  2. 微信开发者工具测试方法
  3. Putty配色方案修改
  4. java se检查异常,JavaSE:异常(下)
  5. 编译报错【error】dexpreopt.sh:23 exited with status 1
  6. Arduino智能小车——小车测速
  7. 支付系统中,账户体系的设计与记账处理
  8. html表格边框线怎么加粗,CAD表格边框如何加粗?CAD表格边框加粗的方法
  9. cad一键卸载工具叫什么_CAD专用卸载修复工具,一键完全彻底卸载删除CAD软件的专用卸载工具...
  10. 记录:The field files exceeds its maximum permitted size of 1048576 bytes...解决方案【亲测有效】