数据库sequence的作用和用法
转:
数据库sequence的作用和用法
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的作用和用法的更多相关文章
- JSP九大内置对象的作用和用法总结?
JSP九大内置对象的作用和用法总结? 1.request对象javax.servlet.http.HttpServletRequest request对象代表了客户端的请求信息,主要用于接受通过HTT ...
- 带你了解数据库中group by的用法
前言 本章主要介绍数据库中group by的用法,也是我们在使用数据库时非常基础的一个知识点.并且也会涉及Join的使用,关于Join的用法,可以看我写的上一篇文章:带你了解数据库中JOIN的用法如有 ...
- JSP九大内置对象的作用和用法总结【转】
JSP九大内置对象的作用和用法总结? JSP中一共预先定义了9个这样的对象,分别为:request.response.session.application.out.pagecontext.c ...
- 三大数据库 sequence 之华山论剑 (上篇)
前言 本文将基于以下三种关系型数据库,对 sequence (序列) 展开讨论. Oracle - 应用最广泛的商用关系型数据库 PostgreSQL - 功能最强大的开源关系型数据库 MySQL - ...
- 三大数据库 sequence 之华山论剑 (中篇)
sequence 用法四 AUTO INCREMENT 通过 DEFAULT 还是需要手动创建 sequence.有没有更简单的用法呢? 当然,就是通过 AUTO INCREMENT 方式,自动创建 ...
- serialVersionUID, ObjectInputStream与ObjectOutputStream类,Serializable接口,serialVersionUID的作用和用法
ObjectInputStream与ObjectOutputStream类所读写的对象必须实现Serializable接口,对象中的transient和static类型成员变量不会被读取和写入 Ser ...
- Oracle函数over(),rank()over()作用及用法--分区(分组)求和& 不连续/连续排名
(1) 函数: over()的作用及用法: -- 分区(分组)求和. RANK ( ) OVER ( [query_partition_clause] order_by_clause )D ...
- Linq中关键字的作用及用法
Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...
- 关于 pgsql 数据库json几个函数用法的效率测试
关于 pgsql 数据库json几个函数用法的效率测试 关于pgsql 几个操作符的效率测试比较1. json::->> 和 ->> 测试方法:单次运行100次,运行10个单次 ...
随机推荐
- 对于写Python学习笔记的看法
学习写笔记是一个不错的学习方法,好些同学在学习Python过程中也会写学习笔记.俗话说好记性不如烂笔头,我很赞同这个说法. 我列举几个学习Python写笔记的好处: 1.Python知识的二度巩固 通 ...
- Windows&Appium&Java&Python自动化测试-配置开发环境
摘要 本篇博文,主要介绍借助Appium做移动端自动化测试的开发环境搭建,包括Java和Python Java环境:Appium+Maven+Idea+TestNG+Reportng Python环境 ...
- iview 表单验证不通过问题?
项目需要,需要怂iview..使用一段时间感觉跟elementUI用起来差不多很方便.使用过程中遇到表单验证问题,如何避免在验证过程中偶尔出现验证不通过的异常情况? <1>:给 <F ...
- 点击a链接防止滚动条滚动
href="javascript:void(0)"而不是 href="#"
- vue多层次组件监听动作和属性
v-bind="$attrs" v-on="$listeners" Vue 2.4 版本提供了这种方法,将父组件中不被认为 props特性绑定的属性传入子组件中 ...
- Boosting算法(一)
本章全部来自于李航的<统计学>以及他的博客和自己试验.仅供个人复习使用. Boosting算法通过改变训练样本的权重,学习多个分类器,并将这些分类器进行线性组合,提高分类性能.我们以Ada ...
- P2709 小B的询问——普通莫队&&模板
普通莫队概念 莫队:莫涛队长发明的算法,尊称莫队.其实就是优化的暴力. 普通莫队只兹磁询问不支持修改,是离线的. 莫队的基本思想:就是假定我得到了一个询问区间[l,r]的答案,那么我可以在极短(通常是 ...
- HDU 6058 - Kanade's sum | 2017 Multi-University Training Contest 3
/* HDU 6058 - Kanade's sum [ 思维,链表 ] | 2017 Multi-University Training Contest 3 题意: 给出排列 a[N],求所有区间的 ...
- ...cURL error 60: SSL certificate problem: unable to get local issuer certificate...
问题描述: 在做PHP爬虫的时候, 安装了 guzzle 和 dom-crawler 之后, 调用的时候出现问题, 如下 报错内容: Fatal error: Uncaught GuzzleHttp ...
- 1 Mybatis
1 使用Maven导入mybatis依赖 在pom.xml中写上一下代码:这些代码的查找可在https://mvnrepository.com/open-source网站上寻找,导入mybatis时要 ...