七、序列
序列(sequence)是一种数据库项,它生成一个整数序列。序列所生成的整数通常可以用来填充数字类型的主键列。
1. 创建序列
CREATE SEQUENCE语句可以用来创建序列,其语法如下:
CREATE SEQUENCE sequence_name
[START WITH start_num]
[INCREMENT BY increment_num]
[{MAXVALUE maximum_num|NOMAXVALUE}]
[{MINVALUE minimum_num|NOMINVALUE}]
[{CYCLE|NOCYCLE}]
[{CACHE cache_num}]
[{NOCACHE}][{ORDER|NOORDER}]
sequence_name指定序列名。
start_num 指定序列从哪个整数开始,该值默认为1
increment_num 指定该序列每次增加的整数增量,值默认为1。increment_num的绝对值
必须小于maximum_num和minimum_num值之差。
maximum_num指定该序列的最大整数。maximum_num必须大于等于start_num,必须大于minimum_num。
minimum_num指定该序列的最小整数。minimum_num必须小于或等于start_num,必须小于maximun_num。
NOMAXVALUE指定升序序列的最大值为10的27次方,降序序列的最大值为-1。NOMAXVALUE为默认值。
NOMINVALUE 指定升序序列的最小值为1,降序排序的最小值为-10的26次方。NOMINVALUE为默认值。
CYCLE表示循环生成整数。升序序列达到最大值,下一个生成的值是最小值,降序相反。
NOCYCLE即达到最大值或最小值就不再生成数了。
cache_num指定要保留在内存中的整数的个数。默认要缓存的整数为20个。可以缓存最少为2个:缓存的整数个数最多ceil((maximum_num -minimum_num)/abs(increment_num))。
NOCACHE指定不缓存任何整数。这可以阻止数据库为序列预分配值,从而避免序列产生不连续的情况,但这回降低性能。序列不连续的情况之所以会发生,是因为在关闭数据库时所缓存的值将全部丢失。如果省略CACHE和NOCACHE,则数据库默认缓存为20。
ORDER确保按照请求次序生成整数,在RAC环境下要用到。
NOORDER不确保按照请求次序生成整数。NOORDER为默认值。
如:createsequence SQ_CHGSERVICEID
minvalue 1
maxvalue 99
start with 1
increment by 1
nocache
cycle;
2. 使用序列
序列生成一系列数字。一个序列中包含两个“伪列”,currval和nextval,可以分别用来获取该序列的当前值和下一个值。在检索序列的当前值是,需要对序列进行初始化,在选择SQ_CHGSERVICEID.nextval时,该序列就被初始化了。
select SQ_CHGSERVICEID.nextvalfrom dual;
select SQ_CHGSERVICEID.currvalfrom dual;
insert intotable_name(table_value) values(SQ_CHGSERVICEID.nextval);
3. 修改序列
ALTER SEQUENCE语句可以用来修改序列。在修改序列时,可以修改的序列内容如下限制:
1) 不能修改序列的初值
2) 序列的最小值不能大于当前值
3) 序列的最大不能小于当前值
如:alter sequence SQ_CHGSERVICEID increment by2;
4. 删除序列
drop sequence SQ_CHGSERVICEID;
八、索引
在查询时,如果引用索引,一般情况下可以提高查询速度,但在插入和删除时,要维护索引,系统也会有开销。下面介绍一下建立索引的简单语法。
1. 创建一般的索引
具体语法: CREATE[UNIQUE] INDEX index_name ON table_name(column_name [, column_name…])TABLESPACE tab_space;
如: create uniqueindex base_index on basetab(msisdn);
2. 创建基于函数的索引
如:create indexbase_index on basetab(upper(msisdn));
说明:并不是所有的索引扫描都快于表扫描,当返回的总数量达到一定程度以后,如返回数据量为表总量的10%以上,索引扫描就不一定快于表扫描了。索引扫描适合返回少量的数据。
九、函数
数据库提供了很多函数,这里选择了一些来进行说明,组值函数中的AVG、COUNT、MAX、MIN和SUM,再介绍一下格式转换to_char和to_date。最后说一下时间函数ADD_MONTHS、LAST_DAY.
1. AVG函数
AVG函数是用来取平均值的函数。
如:basetab中有用户的身高hight列,现在需要得到所有用户的平均值。
Selectavg(hight) from basetab;
2. COUNT函数
Count函数是用来得到表中的行数的
如:要得到basetab中有多少用户
Selectcount(*) from basetab;
3. MAX函数
MAX函数是用来取最大值的函数。
如:basetab中要得到用户最高身高是多少。
Selectmax(hight) from basetab;
4. MIN函数
MIN函数是用来取最小值的函数
如:basetab中要得到用户最小身高是多少
Selectmin(hight) from basetab;
5. SUM函数
SUM函数是用来对列值进行合计
如:basetab中有用户的使用金额列money,现在要得到所有用户使用了多少钱
Selectsum(money) from basetab;
6. TO_CHAR
TO_CHAR是将日期格式的数据转换成指定格式的字符
如:将现在的时间转换成字符。
Selectto_char(sysdate,’yyyymmddhh24miss’) from dual;
7. TO_DATE
TO_DATE是将字符格式的数据转换成指定格式的日期格式
如:将’19820609000000’字符转换成时间。
Select to_date(‘19820609000000’,’yyyy-mm-ddhh24:mi:ss’) from dual;
8. ADD_MONTHS函数
ADD_MONTHS函数在指定的日期上加上或减去(参数传入为负的)几个月
如:在当前时间加上三个月。
Selectadd_months(sysdate,3) from dual;
如:在当前时间上减上三个月
Selectadd_months(sysdate,-3) from dual;
9. LAST_DAY函数
LAST_DAY函数是获得一个月的最后一天的函数
如:获得但前月的最后一天
Select last_day(sysdate) from dual;