资源描述:
《关于oracle自动编号》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、关于oracle自动编号在access中有自动编号的数据类型,MSSQL和MYSQL也都有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值,而oracle没有自动增长的数据类型,我们需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段,可以预见的是,有此功能,我们可以把数据从ACCESS、MSSQL或MYSQL迁移到oracle了!createsequencetype_idincrementby1startwith1;这句中,type_id为序列号的名称,每次增长为1,起始序号为1。如果要删除序列,用dropsequence序列名就可以了!!序列可以保证多个用
2、户对同一张表进行操作时生成唯一的整数,利用序列可以自动生成主关键字,序列只存在于数据字典中.CREATESEQUENCEsequence[INCREMENTBYn][STARTWITHn][{MAXVALUEn
3、NOMAXVALUE}][{MINVALUEn
4、NOMINVALUE}][{CYCLE
5、NOCYCLE}][{CACHEn
6、NOCACHE}];INCREMENTBY--指定步长STARTWITH--指定初始值MAXVALUE--定义序列生成的最大编号.默认的MAXVALUE就是NOMAXVALUE,对于递增序列为10^27,对于递减序列为-1MINVALUE--定义序列的最小编号,
7、默认的MINVALUE为NOMINVALUE,对于递增序列为1,递减序列为-10^26.CYCLE--配置序列在达到界限值时重复编号NOCYCLE--达到界限值时不重复编号,这是默认值,当你试图生成MAXVALUE+1时将返回异常.CACHE--定义在内存中保留的序列编号块的大小,默认值为20.NOCACHE--强制数据词典对于生成的每个序列编号进行更新,保证在生成的编号中没有空缺,但这样会降低性能.生成一个序列CREATESEQUENCEdept_deptid_seqINCREAMENTBY10STARTWITH120MAXVALUE9999NOCACHENOCYCLE;//如果是用来生成
8、主键值的话,不要用CYCLE选项,而且命名序列时最好能体现它的潜在用途以便于理解.确认序列SELECTsequence_name,min_value,max_value,increament_by,last_numberFROMuser_sequences;//如果你指定了NOCACHE选项,那么LAST_NUMBER列将显示下一可用的序列号.使用NEXTVAL可以访问序列中的下一个编号,但问题常常出现在会话初始序列之前查询其当前序列号CURRVALCREATESEQUENCEemp_seqNOMAXVALUENOCYCLE;然后查询SELECTemp_seq.currvalFROMdual
9、;将返回错误,问题就在于你视图引用CURRVAL之前,在你的会话中并没有使用NEXTVAL先初始化此序列.SELECTemp_seq.nextvalFROMdual;这样再查询CURRVAL就不会出错了.使用序列INSERTINTOdepartments(department_id,department_name,location_id)VALUES(dept_deptid_seq.NEXTVAL,'Support',2500);对序列进行缓冲存储可以提高性能,因为这样就不必对每个生成的编号都更新数据字典表,只需要对每一组编号进行更新即可.这样,在我们查询NEXTVAL时就直接从缓冲中提取,
10、速度将快很多,但是进行序列缓冲带来的负面影响就是当数据库被回滚时,比如说系统崩溃,手动ROLLBACK数据时,在缓冲中存储的序列值将会丢失,这也就是为什么会出现空缺(GAPS),如果生成序列时指定的是NOCACHE,那么可以在USER_SEQUENCES表里查询下一个可用的序列号值,这个查询并不会产生增加序列值的动作.修改序列ALTERSEQUENCEdept_deptid_seqINCREMENTBY20MAXVALUE999999NOCACHENOCYCLE;规则:>必须为序列的所有者或者拥有ALTER特权>修改对于以后的序列号生效>序列必须是被删除然后重新生成(使所有相关的对象失效,并
11、且失去相应的关联)>修改时还要满足些其他的验证条件,比如说新的MAXVALUE不可以比现在的序列号低删除序列DROPSEQUENCEdept_deptid_seq;>必须要时序列的所有者或者有DROPANYSEQUENCE的权限索引索引是通过获取特定的行信息而与默认的全表扫描相比大大提高系统性能的数据结构.可是显式的手动建立,也可一由ORACLE自动生成,它们是与之索引的表相独立的,就是说,可以在任何时候建立