转:

数据库sequence的作用和用法

2016年10月14日 19:51:03 很菜很菜的鸟 阅读数 14456 标签: oracle数据库db2sequence
 

seqence的作用:

sequence号是数据库系统按照一定规则自增的数字序列,因为自增所以不会重复。目前就我所了解的sequence的作用主要有两个方面。

一:作为代理主键,唯一识别;

二:用于记录数据库中最新动作的语句,只要语句有动作(I/U/D等),sequence号都会随着更新,所以我们可以根据sequence号来select出更新的语句。

sequence的用法:

sequence和创表类似,需要创建一个sequence,然后表的一个int型字段可以使用这个sequence。

创建一个sequence(db2,oracle均适用)

create seqence sequence_name

[start with n1]

[increment by n2]

[maxvalue n3|no maxvalue]

[minvalue n4|no minvalue]

[cache n5|no cache]

[cycle|no cycle]

[order|no order]

----------------->n1到n5都是整数

----------------->start with 生成的第一个n1值

-----------------> increment by n2 递增量,可以为正整数或负整数,指明每一次增加多少

----------------->maxvalue最大值,no
maxvalue用于指定序列没有上限

----------------->minvalue 最小值,no
minvalue,没有指定最小下限

----------------->cache 用高速缓存中可以预分配的序列号个数,默认是20。 如果缓存中的序列号没有用完就关闭数据库等其它原因. 没有使用的序列号就丢失了,所以不能保证序列号是连续的。nocache高速缓冲中不预分配序列号,每次只生成一个序列号,虽然降低了获取序列号的速度,但是可以保证序列号的连续性。

----------------->cycle 序列达到最大值或最小值后是否循环。再从n1开始循环,默认不no
cycle

----------------->order用于指定按顺序生成序列,只有在RAC时需要指定,指定ORDER
是为了保证序列号是因为有请求才生成的。在使用序列号做为一个时间戳时很有用,no order是不指定按顺序生成序列(默认)。

创建一个sequence:

create
sequence sequence_name as int minvalue 1000 maxvalue 1000000000 start with 1000 increment by 1 no cache;

或者

create
sequence sequence_name minvalue 1000 no maxvalue start with 1000 increment by 1 no cache;

sequence的使用:

sequence_name.nextval
------->引用下一个序列值

sequence_name.currval
/seqence_name.nextval.currval -------->引用当前序列值,必须最少经过一个nextval才能引用currval

在表中使用sequence:

create
table tab_name(col_int int, col_varchar varchar(20), col_seq int);

insert
tab_name into values(1, 'abc', nextval for
sequence_name);   或者 insert tab_name into values(1, 'xyz', sequence_name.nextval);

insert
tab_name into values(2, 'fgh', nextval for sequence_name);
  或者 insert tab_name into values(2, 'fgh', sequence_name.nextval);

update
tab_name set col_varchar='678', col_seq=sequence_name.nextval where col_int=2;

delete tab_name col_sql=sequence_name.nextval where col_int=1;

单独使用查询sequence:

select sequence_name.nextval from dual;
------>每执行一次sequence号会一直增加

select sequence_name.currval from dual;
------->执行多少次都不会变化

改变sequence:

比如对以上创建的sequence除了初始值以外的值进行修改,alter sequence_name minvalue 100000 maxvalue 99999999 increment by
10 cache 10 cycle;

删除sequence:

drop sequence sequence_name;

利用解发器自动为表插入递增序列:---类似自增字段的作用

建解发器代码为:
create or replace trigger trigger_id
before insert on tabname
for each row
declare
nextid number;
begin
IF :new.col_seq IS NULL or :new.col_seq=0 THEN
select sequence_name.nextval
into nextid from sys.dual;
:new.col_seq:=nextid;
end IF;
end trigger_id;

或者

create trigger trigger_id before
insert on tabname
for each row

begin
select sequence_name.nextval 
into:new.col_seq 
from dual;
end trigger_id;

或者

create
or replace trigger trigger_id
before insert or update of col_seq
on tabname
for each row
begin
if inserting then
select sequen_name.nextval into:new.col_seq from dual;
slse
raise_application_error(-20020,

'不允许更新ID值!');
end if;
end;

数据库sequence的作用和用法的更多相关文章

  1. JSP九大内置对象的作用和用法总结?

    JSP九大内置对象的作用和用法总结? 1.request对象javax.servlet.http.HttpServletRequest request对象代表了客户端的请求信息,主要用于接受通过HTT ...

  2. 带你了解数据库中group by的用法

    前言 本章主要介绍数据库中group by的用法,也是我们在使用数据库时非常基础的一个知识点.并且也会涉及Join的使用,关于Join的用法,可以看我写的上一篇文章:带你了解数据库中JOIN的用法如有 ...

  3. JSP九大内置对象的作用和用法总结【转】

    JSP九大内置对象的作用和用法总结?     JSP中一共预先定义了9个这样的对象,分别为:request.response.session.application.out.pagecontext.c ...

  4. 三大数据库 sequence 之华山论剑 (上篇)

    前言 本文将基于以下三种关系型数据库,对 sequence (序列) 展开讨论. Oracle - 应用最广泛的商用关系型数据库 PostgreSQL - 功能最强大的开源关系型数据库 MySQL - ...

  5. 三大数据库 sequence 之华山论剑 (中篇)

    sequence 用法四 AUTO INCREMENT 通过 DEFAULT 还是需要手动创建 sequence.有没有更简单的用法呢? 当然,就是通过 AUTO INCREMENT 方式,自动创建 ...

  6. serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法

    ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Ser ...

  7. Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名

    (1)   函数:  over()的作用及用法:    -- 分区(分组)求和. RANK ( ) OVER ( [query_partition_clause] order_by_clause )D ...

  8. Linq中关键字的作用及用法

    Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...

  9. 关于 pgsql 数据库json几个函数用法的效率测试

    关于 pgsql 数据库json几个函数用法的效率测试 关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次 ...

随机推荐

  1. list列表的使用

    Python最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 list1 = [1,2,3,4,5,6,7,8,9] #创建列表 z = list([1,2,3,4,5,6,7,8 ...

  2. 解决故障码400,“”The plain HTTP request was sent to HTTPS port“”

    Nginx HTTP服务器的报错"400 Bad Request: The plain HTTP request was sent to HTTPS port",本文将讲解如何解决 ...

  3. Java重写(Override)与重载(Overload)

    方法的重写规则 参数列表必须完全与被重写方法的相同: 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同): ...

  4. 三种方式构建C#单例模式

    /// <summary> /// 双检锁实现单例 /// </summary> public sealed class SingletonDoubleCheck { //s_ ...

  5. body element height id small, but the backgroud color is full screen

    http://www.cnblogs.com/xiaoyuersdch/p/9156240.html ------------------------------------------------- ...

  6. CSS性能优化的8个技巧

    本文作者:高峰,360奇舞团前端工程师,W3C性能工作组成员,同时参与WOT工作组的学习. 我们都知道对于网站来说,性能至关重要,CSS作为页面渲染和内容展现的重要环节,影响着用户对整个网站的第一体验 ...

  7. 关于博主skywang123456文章——二叉堆(三)之 Java的实现的质疑

    博客园博主skywang123456(以下简称s博主)是一个大牛级的人物,相信很多程序员都拜读过他的博客,我也不例外,并且受益匪浅.但是对于文章二叉堆(三)之 Java的实现我有一些疑惑,写在这里,供 ...

  8. ActiveMQ部署和代码尝试(二)

    部署和代码尝试 1. 部署在linux 上的acvtiveMQ 要可以通过前台windows 的页面访问,必须把linux 的IP和 windows的 IP 地址配置到同一个网关下 .这种情况一般都是 ...

  9. .net System.Net.Mail 之用SmtpClient发送邮件Demo

    private static bool sendMail()     {     try    {     //接收人邮箱    string SendTo = "XXXXX@163.com ...

  10. 第二个爬虫之爬取知乎用户回答和文章并将所有内容保存到txt文件中

    自从这两天开始学爬虫,就一直想做个爬虫爬知乎.于是就开始动手了. 知乎用户动态采取的是动态加载的方式,也就是先加载一部分的动态,要一直滑道底才会加载另一部分的动态.要爬取全部的动态,就得先获取全部的u ...