Oracle创建自动增长列

Posted 小子没出息

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle创建自动增长列相关的知识,希望对你有一定的参考价值。

前言:

  Oracle中不像SQL Server在创建表的时候使用identity(1001,1)来创建自动增长列,而是需要结合序列(Sequences)和触发器(Triggers)来实现

创建测试表

create table tbluser
(
     ID          NUMBER(10) not null,
     NAME        VARCHAR2(50) not null, 
     SEX         VARCHAR2(2) not null, 
     AGE         NUMBER NOT NULL,
     DESCRIPTION VARCHAR2(1000), 
     PRIMARY KEY("ID") 
)        

 

创建一个序列,从10000开始计数,增量为1

create sequence USER_ID
minvalue 1
maxvalue 9999999999999999999999999999
start with 10000 --从10000开始生成序列
increment by 1 --增量为1
cache 20; --预存20个序列值在内存中,这样可以提高访问序列的速度

为user表创建一个before insert的触发器,在插入之前将表user的主键设置为上面的序列值

CREATE OR REPLACE TRIGGER "USER_ID_TRIGGER" BEFORE
INSERT ON tbluser FOR EACH ROW --一定要加上For each row,表示该触发器适应于每一条记录
declare   
      mid number;   
begin   
      select user_id.nextval into mid from dual; --user_id.nextval是获得上面定义的序列ORDER_ID的下一个值
      :new.id:=mid; --将得到的序列值赋给表user的主键id, 可以用":new"引用将要插入的一行数据
      
--
SELECT USER_ID.Nextval INTO :new.ID FROM dual; end;

 

这样,当执行插入记录的时候,可以这样写

insert into tbluser(name,sex,age,description)values(test,,20,‘‘);

Oracle会调用上面创建的触发器将序列值赋值给主键ID

或者直接在建完序列后直接在插数据的时候在主键的地方直接使用user_id.nextval代替

以上是关于Oracle创建自动增长列的主要内容,如果未能解决你的问题,请参考以下文章

Oracle怎么建自动增长列

oracle数据库从入门到精通之四

Oracle添加自增长字段方法步骤

oracle学习 笔记

怎么样统计oracle DB一天数据增长量

oracle数据库创建自动增长的表空间语句怎么写?