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;
注意:使用序列中 在数据库迁移的时候需注意,因为迁移后表中已存在数据,如不修改起始值,便会违背主键约束,所以在创建序列时要修改序列的起始值。
每天记录一点,就能多学一点。
本文来自博客园,作者:bigroc,转载请注明原文链接:https://www.cnblogs.com/bigroc/p/BigRoc.html
blog:http://www.bigroc.cn 博客园:https://www.cnblogs.com/bigroc