在生活中,我门会需要到一些自动增长的序列,例如记录编号、日志编号等,MySQL和SQL Server采用的是自增字段,Oracle和PostgreSQL采用了更灵活的序列生成器。在本文中,把序列生成器简称为序列。
一、创建序列
创建序列的语法如下:
create sequence 序列名
[minvalue n]
[maxvalue n]
[increment by n]
[start with n]
[cache n|nocache]
[order|noorder]
[cycle|nocycle];
参数说明:
Oracle的序列分为递增序列和递减序列,递减序列极少使用(二十年我从未用过),为了方便介绍,本文假设序列是递增序列。
序列名
:序列名是标志符,建议’以SEQ_打头,例如为T_OPERLOG表的logid字段创建一个序列,可以把它 命名为SEQ_OPERLOG(或SEQ_OPERLOG_LOGID),增加数据结构的可读性,这是我的个人经验,并不是Oracle数据库的要求。
[minvalue n]
:序列的最小值,缺省值是1。
[maxvalue n]
:序列的最大值,缺省值是9999999999999999999999999999。
[increment by n]
:序列递增的步长,缺省值是1。
[start with n]
:序列的起始值,缺省值是minvalue,如果n小于minvalue,创建序列会报语法错误。
[cache n|nocache]
:是否采用缓存机制,nocache不采用缓存,缺省cache 20,数据库每次会生成20个值放在缓存中,如果缓存中有数据,就不需要再查数据库了,采用缓存机制可以提升效率。
[order|noorder
]:获取序列的时候是否按顺序给值,如果多用户一起获取序列的值,使用order可以保证序列值的顺序按访问序列的事件排序,缺省是noorder。
[cycle