Oracle自增标识列

 1.基本语法


(1) 创建序列命

CREATE SEQUENCE  SE_NAME   
    [INCREMENT BY n]   
    [START WITH n]   
    [maxvalue n | nomaxvalue]   
    [minvalue n | nominvalue]   
    [CYCLE|NOCYCLE]   
    [CACHE|NOCACHE]   
    [ORDER|NOORDER]; 

 

INCREMENT BY: 指定序列号之间的间隔,该值可为正的或负的整数,但不可为0。序列为升序。忽略该子句时,缺省值为1。
START WITH:指定生成的第一个序列号。在升序时,序列可从比最小值大的值开始,缺省值为序列的最小值。对于降序,序列可由比最大值小的值开始,缺省值为序列的最大值。
MAXVALUE:指定序列可生成的最大值。
NOMAXVALUE:为升序指定最大值为1027,为降序指定最大值为-1。
MINVALUE:指定序列的最小值。
NOMINVALUE:为升序指定最小值为1。为降序指定最小值为-1026。
CYCLE:循环使用,用大最大值再返。

CACHE:指定cache的值。如果指定CACHE值,Oracle就可以预先在内存里面放置一些Sequence,这样存取的快些。Cache里面的取完后,Oracle自动再取一组到Cache。使用Cache或许会跳号, 比如数据库突然不正常Down掉(Shutdown Abort),Sache中的Sequence就会丢失. 所以可以在Create Sequence的时候用NOCACHE防止这种情况。
ORDER:顺序使用序列值。

(2) 更改序列

ALTER SEQUENCE sequence_name   
[INCREMENT BY n]   
[MAXVALUE n| NOMAXVALUE ]   
[MINVALUE n | NOMINVALUE]   
[CYCLE|NOCYCLE]   
[CACHE|NOCACHE]   
[ORDER|NOORDER];

 

(3) 删除序列

 

DROP SEQUENCE [user.]sequence_name; 

 

2. 序列的使用


序列提供两个方法,NextVal和CurrVal。
NextVal:取序列的下一个值,一次NEXTVAL会增加一次sequence的值。
CurrVal:取序列的当前值。

但是要注意的是:第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,然后返回增加后的值。CURRVAL总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否则会出错。

下面我们来开始使用序列和触发器创建Oracle自增标识列!

新建表   ADMIN 

字段:AID、用户:ANAME、密码:APASSWORD 执行语句

// 第一步:创建表

CREATE TABLE ADMIN   
(    
    AID  NUMBER NOT NULL,    
    ANAME  CHAR(10) NOT NULL,    
    APASSWORD  VARCHAR2(50),    
);  

 

// 第二步:创建自动增长序列

CREATE SEQUENCE SE_ADMIN   
INCREMENT BY 1       
START WITH 1  
NOMINVALUE           
NOMAXVALUE            
NOCYCLE    
NOCACHE   
NOORDER;  

 

// 第三步:创建触发器 

CREATE TRIGGER TR_ADMIN_AID BEFORE    
INSERT ON  ADMIN FOR EACH ROW    
BEGIN    
SELECT SE_ADMIN.NEXTVAL INTO:NEW.AID FROM DUAL;    
END;  

 // 第四步:提交

 

COMMIT;

 // 第六步:验证数据是否插入成功 

 

select * from ADMIN; 

   

 

你可能感兴趣的:(oracle,cache)