凉水代码

Code Cold Water

导航

Oracle 自增长列

Posted on 2011-04-19 15:00  凉水代码  阅读(346)  评论(1编辑  收藏  举报

创建序列:

CREATE SEQUENCE name [INCREMENT BY n] 
[START WITH n] [{MAXVALUE n | NOMAXVALUE}] 
[{MINVALUE n | NOMINVALUE}] [{CYCLE | NOCYCLE}] 
[{CACHE n | NOCACHE}] 
INCREMENT BY n 一次增长n 个数字 
NOMAXVALUE 缺省值10E+27 
NOMINVALUE 缺省值1 
NOCYCLE 不循环, 常用于唯一关键字 
CACHE n 在内存里缓存n个序列,出错回退时会丢失
序列号的名称一般可以采用“表名_字段名”的命名规则

插入自动增长序列号字段的方法 

INSERT时如果要用到从1开始自动增长的数字做唯一关键字, 应该先建立一个序列号. 
20

J2EE @ zxw 
CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1 START WITH 1 
MAXVALUE 99999 NOCYCLE NOCACHE; 
其中最大的值按字段的长度来定,比如定义的自动增长的序列NUMBER , 最大值为999999 
INSERT 语句插入这个字段值为: 序列号的名称.NEXTVAL
SQL> insert into s_dept(id, name, region_id) values (s_dept_id.nextval, 'finance', 2); 

查询序列号的情况

SQL> select sequence_name, min_value, max_value, increment_by, last_number from user_sequences; 

改变序列号 

SQL> ALTER SEQUENCE sequence [INCREMENT BY n] [{MAXVALUE n | NOMAXVALUE}] 
[{MINVALUE n | NOMINVALUE}] 
[{CYCLE | NOCYCLE}] [{CACHE n | NOCACHE}]; 
注意: 不能改变它的起始值 
如果要改变序列的起始值, 先把序列号删除掉, 再新建一个.
删除序列号 
SQL>DROP SEQUENCE sequence; 
不能用序列号的nextval和currval的地方
视图的查询 
有distinct的查询 
有group by,having,order by的查询 
有子查询的查询 
表里的缺省值