当前位置:首页 > 开发 > 数据库 > 正文

oracle实现自增长

发表于: 2014-10-22   作者:迷雾雪兰   来源:转载   浏览:
摘要: 利用序列产生主键值。 序列(Sequence)是一种可以被多个用户使用的用于产生一系列唯一数字的数据库对象。序列定义存储在数据字典中,通过提供唯一数值的顺序表来简化程序设计工作,可以使用序列自动产生主键的键值。当一个序列第一次被查询调用时,它将返回一个预定值。在随后的每次查询中,序列将产生一个按指定的增量增长的值。序列可以循环,或者是连续增加的,直到指定的最大值为止。 创建序列语法如下:c
利用序列产生主键值。

序列(Sequence)是一种可以被多个用户使用的用于产生一系列唯一数字的数据库对象。序列定义存储在数据字典中,通过提供唯一数值的顺序表来简化程序设计工作,可以使用序列自动产生主键的键值。当一个序列第一次被查询调用时,它将返回一个预定值。在随后的每次查询中,序列将产生一个按指定的增量增长的值。序列可以循环,或者是连续增加的,直到指定的最大值为止。
创建序列语法如下:create sequence [模式]序列名称[start with 起始数字] [increment by 增量][maxvalue 最大值|nomaxvalue][minvalue 最小值|nominva lue][cycle|nocuyle][cache 数目|nocache][order|noorder]。

通过序列起始数字、最大值、最小值和增量值可以确定序列是增序还是减序,每次增或减的多少。Nocyle选项用于确定在序列达到最大值(增序列)或最小值(减序列)之后不能再产生更多的值,用以防止序列回转。

在Oracle数据库中创建序列,在使用sql语句向数据库中写入数据的时候,利用序列产生的唯一值,实现表中主键值自增。例如:
1.SQL>create table tablename   
2. 
3.    (id number notnull,…);
4. 
5.      
6.SQL >create sequence autoID increment by 1 start with 1 maxvalue 999999 cycle; 
7. 
8.    
9.SQL >insert into tablename values(autoID.nextval,...);

多个用户可以共用一个序列,但它是针对所有的表,因此产生的序号对一个表而言产生的主键值唯一但是不连续。

使用触发器产生主键值。

在数据表中,有时候需要主键值自动增加,但在Oracle数据库中,没有象Mysql的Autoincrement一样自动增长的数据类型。在实现Oracle数据库字段自增功能时,利用DML触发器来完成。

触发器(trigger)是一些过程,当发生一个特定的数据库事件时就执行这些过程,可以使用触发器扩充引用的完整性。DML即数据操纵语言,用于让用户或程序员使用,实现对数据库中数据的操作。基本的数据操作分成两类四种:检索(查询)和更新(插入、删除、修改)。触发器类似于函数和过程,其在数据库中以独立身分存在。触发事件可以是对数据库表的DML(insert、update或delete)操作等。DML触发器是目前最广泛使用的一种触发器,即由DML语句激发的触发器,并有该语句决定DML触发器的类型。其触发事件包括insert(插入)、update(更新)和delete(删除)。无论哪种触发事件,都能为每种触发事件创建before触发器和after触发器。如可以在表上建立一个before insert 语句,表示在insert事件发生之前采取行动。

创建触发器的语法如下:
1.create[or replace]trigger 触发器名称   
2. 
3.{before|after|instead of}激发触发事件   
4. 
5.referencing_clause   
6. 
7.[WHEN trigger_condition]   
8. 
9.[FOR EACH ROW]  

referencing_clause用来引用正在处于修改状态下的行中的数据,如果在WHEN子句中指定trigger_condition的话,则首先对该条件求值。触发器主体只有在该条件为真值时才运行。利用触发器与序列相结合,可以实现在进行DML操作的时候,使表中主键值自动增加。其实现步骤可参照如下例子。


1.drop table book;  
2.--创建表     
3.create table book(      
4.   bookId varchar2(4) primary key,  
5.   name varchar2(20)        
6.);  
7.--创建序列     
8.create sequence book_seq start with 1 increment by 1;   
9. 
10.--创建触发器     
11.create or replace trigger book_trigger      
12.before insert on book      
13.for each row      
14.begin      
15.select book_seq.nextval into :new.bookId from dual;     
16.end ;  
17.--添加数据     
18.insert into book(name)  values ('cc');   
19.insert into book(name)  values ('dd');  
20. 
21.commit; 

查询数据:select * from book;

当需要对book数据库表中的主键值进行写值时,便可以使用sql语句利用序列+触发器实现主键值自动增加.

oracle实现自增长

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
最近做项目遇到这样一个问题,需求类似下面这样。这里有两张表: 表一(test) 表二(test2) 描述
Oracle自增长的处理: 众所周知,Oracle没有自增概念,需要创建一个sequence,然后获得唯一ID。 Eov
1.sql查看表空间 desc dba_data_files; 2.select FILE_NAME,TABLESPACE_NAME from dba_data_files;
package org.rowsequence; import org.apache.hadoop.hive.ql.exec.Description; import org.apache
今天突然有位前端的朋友问我textarea怎么实现高度随内容自增长,我一下子懵了,首先想到的是用js改
在网上查过一些资料,很多人说,mysql中,只有主键才能设置为自增长列。 经过一些深入的了解,其实
在InnoDB存储引擎中,对于每个含有自增长值的表都有一个自增长计数器(auto-increment counter)当对
在网上查过一些资料,很多人说,mysql中,只有主键才能设置为自增长列。 经过一些深入的了解,其实
一、在SQL Server Management Studio中实现 打开数据库之后,在选中的表上点“修改”,在选中需要设
本操作基于PowerDesigner 15。 第一步:创建数据表(创建表省略)。 第二步:给数据设置序列,实现自
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号