Oracle实现table中的自动编号


这是个简单的功能,就是利用自动增长列和触发器来实现。

1.首先创建一个简单的表格users

  1. --create table users   
  2. create table system.users(  
  3. userid varchar2(20) primary key,  
  4. username varchar(20) not null,  
  5. userpassword varchar2(20) not null,  
  6. userage number(3) default 0,  
  7. usersex char(2) default '男'  
  8. )  

primary key设置主键

not null不允许为空

default 设置默认值 

2.然后创建自动增长列

  1. --create sequences userid   
  2. create sequence system.users_userid_sequence  
  3. start with 1  
  4. increment by 1  
  5. minvalue 1  
  6. nomaxvalue  
  7. nocache  

从1开始

每次增长1

最小值为1

没有最大值

不设置缓存 

3.创建触发器

  1. --create triggers userid   
  2. create or replace trigger system.users_userid_bifer  
  3. before insert   
  4. on system.users  
  5. for each row  
  6. when(new.userid is null)  
  7. begin  
  8. select system.users_userid_sequence.nextval into:new.userid from dual;  
  9. end;  

create or replace 是创建或替换的意思,没有就创建,有就替换掉

当在system.users这个表的

每一行中执行插入之前

检查当前(new代表当前的,也就是users)表格中的userid是否为null,如果是

开始执行

将从自动增长列中查询获得下一个数并赋给当前的userid

执行结束

至于from dual这个完全是为了语法的统一。dual没有什么意义。 

4.测试

  1. insert into system.users(username,userpassword,userage,usersex) values('张三','123456','20','男');  
  2. insert into system.users(username,userpassword,userage,usersex) values('李四','123456','21','男');  
  3.   
  4. select * from system.users  

相关内容