当前位置:Gxlcms > 数据库问题 > oracle 实现 自增主键功能

oracle 实现 自增主键功能

时间:2021-07-01 10:21:17 帮助过:7人阅读

如果是第一条纪录,插入的数据项为

 

id    |    key1    |    key2

 

1     |    k1        |    k2

 

  2)Oracle没有这个”auto_increment”属性,所以它没法像MySQL般在表内定义自增主键。 但是,Oracle里的序列(SEQUENCE),可间接实现自增主键的作用。   序列(Sequence),又叫序列生成器,用于提供一系列的数字,开发人员使用序列生成唯一键。每次访问序列,序列按照一定的规律增加或者减少。 序列的定义存储在SYSTEM表空间中,序列不像表,它不会占用磁盘空间。 序列独立于事务,每次事务的提交和回滚都不会影响序列。   创建的方法及参数说明如下,想了解更多,可以具体查一下oracle database sequence的说明: 技术图片
  1. 1 CREATE SEQUENCE SEQNAME //序列名字
  2. 2 INCREMENT BY 1 //每次自增1, 也可写非0的任何整数,表示自增,或自减
  3. 3 START WITH 1 //以该值开始自增或自减
  4. 4 MAXVALUE 1.0E20 //最大值;设置NOMAXVALUE表示无最大值
  5. 5 MINVALUE 1 //最小值;设置NOMINVALUE表示无最大值
  6. 6 CYCLE or NOCYCLE //设置到最大值后是否循环;
  7. 7 CACHE 20 //指定可以缓存 20 个值在内存里;如果设置不缓存序列,则写NOCACHE
  8. 8 ORDER or NOORDER //设置是否按照请求的顺序产生序列
技术图片 oracle实现自增主键,如上例,其表的创建语句如下:  
  1. 1 CREATE TABLE Demo
  2. 2 (
  3. 3 id INT NOT NULL PRIMARY KEY,
  4. 4 key1 VARCHAR2(40) NULL,
  5. 5 key2 VARCHAR2(40) NULL
  6. 6 );
没有auto_increment属性了。 插入时实现自增主键,先创建序列: 技术图片
  1. 1 CREATE SEQUENCE SEQ
  2. 2 INCREMENT BY 1
  3. 3 START WITH 1
  4. 4 MAXVALUE 1.0E20
  5. 5 MINVALUE 1
  6. 6 NOCYCLE
  7. 7 CACHE 20
  8. 8 NOORDER
技术图片 插入时:   1 insert into Demo(id, key1, key2)  2 value(SEQ.NEXTVAL,"k1","k2")   然而,上述方法不适用于insert的另一种使用方式;即   1 insert into table(key1, key2) select k1, k2 from anotherTable;   所以真正设计时,应该用触发器保证自增主键的实现,如下过程:   下面用一个例子来说明自增主键的创建:      1、建用户数据表  
  1. 1 drop table dectuser;
  2. 2 create table dectuser(
  3. 3 userid integer primary key, /*主键*/
  4. 4 name varchar2(20),
  5. 5 sex varchar2(2)
  6. 6 );
2、创建自动增长序列    
  1. 1 drop sequence dectuser_tb_seq;
  2. 2 create sequence dectuser_tb_seq minvalue 1 maxvalue 99999999
  3. 3 increment by 1
  4. 4 start with 1; /*步长为1*/
3、创建触发器     技术图片
  1. 1 create or replace trigger dectuser_tb_tri
  2. 2 before insert on dectuser /*触发条件:当向表dectuser执行插入操作时触发此触发器*/
  3. 3 for each row /*对每一行都检测是否触发*/
  4. 4 begin /*触发器开始*/
  5. 5 select dectuser_tb_seq.nextval into :new.userid from dual;
  6. 6 /*触发器主题内容,即触发后执行的动作,在此是取得序列dectuser_tb_seq的下一个值插入到表dectuser中的userid字段中*/
  7. 7 end;
  8. 8 /
技术图片 4、提交         现在就完成了自增主键的设定,搞定!可以检测一下。  
  1. 1 insert into dectuser(name,sex) values (‘feng‘,‘男);
  2. 2 commit; /*提交*/
  提示“已创建一行”,表示成功。     上述示例的代码,是直接引用他人的文章内容;原贴在http://shanxmxj.javaeye.com/blog/948739   自己试过此方法,但对select into感觉还是有些地方理解得不好。

oracle 实现 自增主键功能

标签:gpo   缓存   磁盘空间   参数   star   bsp   触发器   article   span   

人气教程排行