oracle学习 笔记(2)

题记:在使用Oracle数据库的时候,发现Oracle是没有自动增长列来实现主键的,所以在此记录学习。(PS:如果哪里有错误或者不足的地方还请大家帮忙指出来)

二、序列(自动增长列)

  为此问题博主也是各种搜索,挖贴子,最终也没有找到为什么Oracle没有自增列这一原因,还望有大牛看到出来指点迷津,在此谢过了。(2023-05-11 是否有可能分表的时候主键处理起来方便?)

  因为在SQL Server中有会自动生成的“自动增长列”来实现主键”,很是方便,所以在换用Oracle的时候还是有点不习惯的,不过俗语说得好,不管白猫黑猫,捉到老鼠就是好猫;在Oracle中便使用序列来实现这一功能的。

1.创建序列

 

 1 /*
 2     创建序列
 3 */
 4  --注意命名规范
 5 CREATE SEQUENCE sequence_name
 6 --指定要生成的第一个序列,对于升序,默认值为最小值;对于降序,默认值为最大值
 7 [START WITH integer]
 8 --用于指定序列号之接的间隔,默认值为1 , 若值为正值,则生成序列按升序排列;若为负值,则生成序列为降序排列
 9 [INCREMENT BY integer]
10 --MAXVALUE:指定序列可以生成最大值;
11 --NOMAXUALUE:如果指定了NOMAXUALUE,Oracle将升序序列的最大值设为10^27,将降序序列的最大值设为-1;此为默认选项
12 [MAXVALUE integer|NOMAXUALUE]
13 --MINVALUE:指定序列的最小值,必须小于或等于START WITH值,并且必须小于MAXVALUE;
14 --NOMAXUALUE:如果指定NOMAXUALUE,Oracle将升序序列的最小值设为1,将降序序列的最小值设为-10^26;此为默认选项
15 [MINVALUE integer|NOMINUALUE]
16 --CYCLE:指定序列达到最大值或者最小值之后,将重新从头开始生成值
17 --NOCYCLE:指定序列达到最大值或者最小值之后,将不能在继续生成值
18 [NOCYCLE|CYCLE]
19 --CACHE:预先缓存分配一组序列号,并将其保留在内存中,这样可以更快的访问序列号。当缓存序列号用完时,将生成另一组序列号将其保留在缓存中
20 --NOCACHE:关闭缓存,忽略此选项默认缓存20个序列号
21 [CACHE integer|NOCACHE];

 

2.访问序列

 

1 /*
2   例    访问序列
3 */
4 --使用NEXTVAL创建序列后第一次调用返回初始值,之后再次引用时,将使用INCREMENT BY子句来增加的值,并返回这个新值
5 INSERT INTO tableName(id,name,price)
6     VALUES(sequence_name.NEXTVAL,BigRoc,1);
7 
8 --返回序列的当前值,即最后一次引用NEXTVAL时返回的值,dual是Oracle提供的一张表 只会返回一行一列记录
9 SELECT sequence_name.CURRVAL FROM dual;

 

3.更改序列

 1 ALTER SEQUENCE sequence_name
 2 
 3   [INCREMENT BY integer]
 4 
 5   [MAXVALUE integer|NOMAXUALUE]
 6 
 7   [MINVALUE integer|NOMINUALUE]
 8 
 9   [NOCYCLE|CYCLE]
10 
11   [CACHE integer|NOCACHE];

注意:不能修改序列的START WITH参数,在修改序列时应注意升序序列的最小值应小于最大值!!!

4.删除序列

 

1 DROP SEQUENCE sequence_name;

 

注意:使用序列中 在数据库迁移的时候需注意,因为迁移后表中已存在数据,如不修改起始值,便会违背主键约束,所以在创建序列时要修改序列的起始值。

 

 

 

 

每天记录一点,就能多学一点。

 

posted @ 2017-03-25 22:46  bigroc  阅读(254)  评论(2编辑  收藏  举报