`
wlh269
  • 浏览: 455820 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

在Oracle下实现主键自增(触发器)

阅读更多
最近做某个系统需要使用Oracle作为数据后台,之前使用SQL-Server和MySQL都特别习惯使用系统的字增功能,让一个数据字段,通常是ID作为主键实现自增,但是发现Oracle中创建向导中根本就没有这项功能。自己想的方法是采用触发器Trigger,或者更加复杂的专门创建一个数据表用来存储index。Baidu之后得到如下答案:

利用序列产生主键值。

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

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

在Oracle数据库中创建序列,在使用sql语句向数据库中写入数据的时候,利用序列产生的唯一值,实现表中主键值自增。例如:


SQL>create table tablename 

    (id number notnull,…); 

    
SQL >create sequence autoID increment by 1 start with 1 maxvalue 999999 cycle; 

  
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事件发生之前采取行动。

创建触发器的语法如下:

create[or replace]trigger 触发器名称 

{before|after|instead of}激发触发事件 

referencing_clause 

[WHEN trigger_condition] 

[FOR EACH ROW] 



referencing_clause用来引用正在处于修改状态下的行中的数据,如果在WHEN子句中指定trigger_condition的话,则首先对该条件求值。触发器主体只有在该条件为真值时才运行。利用触发器与序列相结合,可以实现在进行DML操作的时候,使表中主键值自动增加
。其实现步骤可参照如下例子。
drop table book;
--创建表   
create table book(    
   bookId varchar2(4) primary key,
   name varchar2(20)      
);
--创建序列   
create sequence book_seq start with 1 increment by 1; 

--创建触发器   
create or replace trigger book_trigger    
before insert on book    
for each row    
begin    
select book_seq.nextval into :new.bookId from dual;   
end ;
--添加数据   
insert into book(name)  values ('cc'); 
insert into book(name)  values ('dd');

commit;





查询数据:
SQL> select * from book; 

         ID   A

----------- ----------

             1    aa

             2    bb

在JSP页面中,当需要对book数据库表中的主键值进行写值时,便可以使用sql语句利用序列+触发器实现主键值自动增加。具体语句如下:

<% String sql="insert into book (a) values('aa' )";

stmt.executeUpdate(sql);%>

数据库表中便会自动生成ID的值。
分享到:
评论
2 楼 TenAclock 2011-11-02  
book表的id类型设置的不合适(在oracle10g上测试),
引用


drop table book;  
--创建表     
create table book(      
   bookId varchar2(4) primary key,  
   name varchar2(20)        
);  


应该是:

drop table book;  
--创建表     
create table book(      
   bookId int primary key,  
   name varchar2(20)        
);
1 楼 caowei=root 2011-06-16  
执行结果是这样的

  2  before insert on book
  3  for each row
  4  begin
  5  select book_seq.nextval into :new.bookId from dual;
  6  end ;
  7  --添加数据
  8  insert into book(name)  values ('cc');
  9  insert into book(name)  values ('dd');
10 
11  commit;

12 
完全都不能执行完

相关推荐

    Oracle创建主键自增表(sql语句实现)及触发器应用

    这样,我们就成功地创建了一个具有主键自增功能的Oracle表,并通过触发器实现了插入数据时主键的自动递增。这种方法对于需要唯一标识符的场景非常有用,例如在用户管理、订单系统或其他需要跟踪唯一实体的系统中。

    创建oracle数据库中表的主键和自增

    ### 创建Oracle数据库中表的...总之,通过使用序列和触发器,Oracle数据库可以轻松地实现主键自增功能,这对于需要唯一标识符的应用程序来说非常重要。这种方式不仅简化了开发流程,还提高了数据处理的效率和准确性。

    Navicat Premium中Oracle创建主键自增的方法

    到此这篇关于Navicat Premium中Oracle创建主键自增的方法的文章就介绍到这了,更多相关Navicat Premium主键自增内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!

    oracle数据库主键自增并且返回主键值

    1.1、直接在PLSQL中设置 1.2、命令创建 create sequence seq_users ##创建序列seq_users increment by 1 ## 步长,每次加1 start with 1 ##从1开始 minvalue 1 ##最小值 maxvalue 9999999 ##最大值 order ##确保...

    Oracle主键自增的办法

    当新行插入到表中时,触发器会自动将序列的下一个值赋给指定的自增字段,从而实现了类似其他数据库的自增主键功能。 通过这种方式,即使 Oracle 没有内置的自增字段,我们仍然可以利用序列和触发器来实现这一需求...

    Oracle中主键自增实例

    以下是一些关于在Oracle中创建主键自增实例的方法和相关知识点。 1. 使用序列(Sequences): Oracle序列是一种数据库对象,可以生成唯一的整数序列。创建序列后,可以在插入新记录时引用它来获取下一个可用的序列...

    oracle主键自增

    oracle 数据库主键自增脚本 --第一步,创建表 --第二步,创建自增序列 --第三步,创建触发器

    如何实现Oracle自增,序列,触发器都有

    ### 如何实现Oracle主键自增,通过写sequence和触发器 在Oracle数据库中实现主键自增功能可以通过创建序列(sequence)与触发器(trigger)相结合的方式实现。这种方式不仅能够确保数据表中的主键唯一性,还能自动递增...

    ORACLE自增主键设置方法

    在Oracle数据库中,自增主键是一种常见的主键设计方式,它能够确保每条记录的唯一性,并且在插入新记录时自动递增,简化了数据管理流程。本文将详细介绍如何在Oracle中设置自增主键。 #### 一、创建序列(Sequence...

    oracle通过触发器,实现序列自增

    本文将详细介绍如何通过触发器与序列相结合的方式,在Oracle数据库中实现记录的自增功能。 #### 一、理解Oracle序列 在开始之前,首先需要了解Oracle中的序列。序列是一个数据库对象,它能够生成连续的整数序列。...

    oracle 主键自增相关命令

    以下是对创建和使用Oracle主键自增的相关知识点的详细说明: 1. **创建表并定义主键**: 当我们创建表时,可以指定某列为主键。例如,创建名为`book`的表,`id`列为整数类型的主键: ```sql CREATE TABLE book ...

    Oracle建立自增主键

    在Oracle数据库管理中,创建自增主键是一种常见的需求,尤其是在需要自动为表中的每一行记录分配一个唯一标识符的情况下。本文将详细介绍如何利用Oracle提供的`SEQUENCE`和`TRIGGER`来实现自增主键。 #### 一、概述...

    oracle中如何实现ID自增

    在Oracle数据库中,实现ID自增的一种常见方法是通过结合使用序列(Sequence)和触发器(Trigger)。这种方法非常实用,特别是在需要为表中的记录自动生成唯一标识符的情况下。 ##### 创建序列(Sequence) 首先,...

    powerdesigner创建oracle_数据库表,设置表主键列为自动增长

    为了实现主键的自动增长功能,我们需要通过创建一个序列(sequence)来实现这一目标。 1. **在表视图中设置:** - 双击表视图,打开`Table Properties`对话框。 - 转到`Columns`选项卡,选择要作为主键的列。 - ...

    Oracle自增序列和触发器生成工具.zip

    Oracle数据库在设计关系型数据库时,常常需要使用到自增序列和触发器来实现自动增长的主键。自增序列可以确保数据的唯一性,而触发器则可以在特定事件(如INSERT、UPDATE或DELETE)发生时执行一些额外的操作。本...

    oracle中设置自增主键参考

    本文将详细介绍如何在Oracle中实现自增主键的功能。 #### 创建表与自增序列 在创建表时,我们首先需要定义一个数字类型的字段作为主键,并设置为`NOT NULL`以确保该字段不能为空。然后,通过创建一个自增序列来...

    Oracle数据库中创建自增主键的实例教程

    在设计数据库表的时候发现Oracle没有自增主键的设置,Google了解到Oracle本身并不支持自增主键,需要通过序列(Sequence)和触发器(Trigger)实现。 创建表Student Create Table Student( id number(12) primary ...

    Oracle数据库创建表tuser设置主键自动增长

    本篇详细介绍了如何在Oracle数据库中创建一张包含自动增长主键的表`tuser`,并通过创建序列和触发器实现了这一功能。这种做法不仅能够简化主键管理的工作量,还能够确保数据的一致性和完整性。对于实际应用来说,这...

    oracle主键自动增长

    ### Oracle主键自动增长知识点详解 #### 一、Oracle序列(Sequence)的使用方法 ...通过这些技术,可以在不依赖于数据库本身的特性的情况下,灵活地实现主键的自增,从而满足各种应用场景的需求。

Global site tag (gtag.js) - Google Analytics