日期:2014-05-16  浏览次数:20466 次

Oralce学习之DDL相关(一)--SEQUENCE学习

--先创建一个用户表作为测试用例
Create  table  t_user(
Id number(6),
userid varchar2(20),
loginpassword varchar2(20),
isdisable number(6)
)
TABLESPACE "TONY";

--创建sequence管理自增长,
--在sequence中应注意:
--1、 第一次NEXTVAL返回的是初始值;随后的NEXTVAL会自动增加你定义的INCREMENT BY值,
--然后返回增加后的值。CURRVAL 总是返回当前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,
--否则会出错。一次NEXTVAL会增加一次SEQUENCE的值,所以如果你在同一个语句里面使用多个NEXTVAL,其值就是不一样的。
--2、 如果指定CACHE值,ORACLE就可以预先在内存里面放置一些sequence,这样存取的快些。
--cache里面的取完后,oracle自动再取一组到cache。 使用cache或许会跳号,
--比如数据库突然不正常down掉(shutdown abort),cache中的sequence就会丢失.
--所以可以在create sequence的时候用nocache防止这种情况

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


--创建触发器管理刚刚创建的sequenceuser_seq
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('tony','123', 0);
insert into t_user(userid,loginpassword, isdisable)
values('jack','123', 0);
--查询验证,success...
SELECT * FROM t_user;

--收工,oracle的管理就是复杂麻烦,但是肯定的说,这种管理对于性能上一定有所提高,要不然就会和sqlserver、mysql一致了