oracle中主键自增

时间:2022-08-18 22:31:09

oracle中主键自增

下面用一个例子来说明自增主键的创建:

1、建用户数据表

drop table dectuser;

create table dectuser(

userid integer primary key,  /*主键,自动增加*/

name varchar2(20),

sex varchar2(2)

);2、创建自动增长序列

drop sequence dectuser_tb_seq;

create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999

increment by 1

start with 1;   /*步长为1*/

3、创建触发器

create or replace trigger dectuser_tb_tri

before insert on dectuser     /*触发条件:当向表dectuser执行插入操作时触发此触发器*/

for each row                       /*对每一行都检测是否触发*/

begin                                  /*触发器开始*/

select dectuser_tb_seq.nextval into :new.userid from dual;   /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中,注意:new.userid 是new.加上原表的主键*/

end;

/                                        /*退出sqlplus行编辑*/

4、提交

commit;

现在就完成了自增主键的设定,搞定!可以检测一下。

insert into dectuser(name,sex) values ('wang','女');

提示“已创建一行”,表示成功。呵呵:D

方法二:

oracle中创建自增主键

首先,创建一张表

CREATE TABLE example(

ID Number(4) NOT NULL PRIMARY KEY,

NAME VARCHAR(25),

PHONE VARCHAR(10),

ADDRESS VARCHAR(50));

然后,你需要一个自定义的sequence

CREATE SEQUENCE emp_sequence

INCREMENT BY 1 -- 每次加几个

START WITH 1 -- 从1开始计数

NOMAXVALUE -- 不设置最大值

NOCYCLE -- 一直累加,不循环

NOCACHE -- 不建缓冲区

以上代码完成了一个序列(sequence)的建立过程,名称为emp_sequence,范围是从1开始到无限大(无限大的程度是由你机器决定的),nocycle 是决定不循环,如果你设置了最大值那么你可以用cycle 会使seq到最大之后循环.对于nocache顺便说一下如果你给出了cache值那么系统将自动读取你的cache值大小个seq

,这样在反复操作时会加快运行速度,但如果遭遇意外情况如当机了或oracle死了,则下次取出的seq值将和上次的不连贯

书接上文,你只有了表和序列还不够,还需要一个触发器来执行它!代码如下:

CREATE or replace TRIGGER "触发器名称" BEFORE

INSERT ON example FOR EACH ROW WHEN (new.id is null)

begin

select emp_sequence.nextval into: new.id from dual;

end;

插入数据

INSERT INTO example(Name,phone,address) Values('Cao','56498543','Heibei');

=============================================================

ORACLE SEQUENCE的简单介绍(自增长字段)-

转自:http://blog.163.com/liyaodong03436@126/blog/static/83858155200861542646280/