[oracle]数据库触发器的使用。创建一个自动增加的ID

哎哎7年前数据库2977

将表t_uaer的字段ID设置为自增:(用序列sequence的方法来实现)

----创建表


Create table t_user(  
Id number(6),userid varchar2(20),loginpassword varchar2(20),isdisable number(6)  
);

----创建序列


create sequence user_seq   
  
  
increment by 1   
start with 1  
nomaxvalue  
nominvalue  
nocache

----创建触发器

create or replace trigger tr_user  
before insert on t_user  
for each row  
begin  
select user_seq.nextval into :new.id from dual;  
end;


----测试


insert into t_user(userid,loginpassword, isdisable)  
values('ffll','liudddyujj', 0);  
insert into t_user(userid,loginpassword, isdisable)  
values('dddd','zhang', 0)  
select * from t_user;


就可以看出结果。

对sequence说明:

increment by :用于指定序列增量(默认值:1),如果指定的是正整数,则序列号自动递增,如果指定的是负数,则自动递减。

start with :用于指定序列生成器生成的第一个序列号,当序列号顺序递增时默认值为序列号的最小值 当序列号顺序递减时默认值为序列号的最大值。

Maxvalue:用于指定序列生成器可以生成的最大序列号(必须大于或等于start with,并且必须大于minvalue),默认为nomaxvalue。

Minvalue:用于指定序列生成器可以生成的最小序列号(必须小于或等于starr with,并且必须小于maxvalue),默认值为nominvalue。

Cycle:用于指定在达到序列的最大值或最小值之后是否继续生成序列号,默认为nocycle。

Cache:用于指定在内存中可以预分配的序列号个数(默认值:20)。

在sequence中应注意:

1、 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。

2、 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号, 比如数据库突然不正常down掉(shutdownabort),cache中的sequence就会丢失. 所以可以在create sequence的时候用nocache防止这种情况。


相关文章

navicat for oracle,出现connection to server failed, probable Oracle Net admin error,解决办法,错误怎么办?

  解决connection to server failed, probable Oracle Net admin error  navicat for oracle,oracle客户端软件,  我...

oracle中 OMB Plus是干什么的

  oracle中 OMB Plus是干什么的?  OMB Plus is a flexible, high-level command line metadata access tool for O...

oracle设计数据库应选择正确的数据类型

  在设计数据库的时候,选择正确的数据类型,往往可以避免很多的问题,正确理解数据库的类型,对于存储空间规划,应用性能调整都会很有帮助,下面是我个人的一点总结: 1、 Char定长格式字符串,在数据库中...

Oracle数据库错误消息

  Oracle数据库错误消息导出错误消息  l EXP-00000导出终止失败  原因:导出时产生Oracle错误。  操作:检查相应的Oracle错误消息。  l EXP-00001数据域被截断...

orale的tnsping与TCP/IP的ping命令的比较

  比较orale的tnsping与TCP/IP的ping命令:  ------------------------------------------------------------------...