数据库基础(三)

七、序列

  序列(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 指定该序列每次增加的整数增量,值默认为1increment_num的绝对值

必须小于maximum_numminimum_num值之差。

maximum_num指定该序列的最大整数。maximum_num必须大于等于start_num,必须大于minimum_num

minimum_num指定该序列的最小整数。minimum_num必须小于或等于start_num,必须小于maximun_num

NOMAXVALUE指定升序序列的最大值为1027次方,降序序列的最大值为-1NOMAXVALUE为默认值。

NOMINVALUE 指定升序序列的最小值为1,降序排序的最小值为-1026次方。NOMINVALUE为默认值。

CYCLE表示循环生成整数。升序序列达到最大值,下一个生成的值是最小值,降序相反。

NOCYCLE即达到最大值或最小值就不再生成数了。

cache_num指定要保留在内存中的整数的个数。默认要缓存的整数为20个。可以缓存最少为2个:缓存的整数个数最多ceil((maximum_num -minimum_num)/abs(increment_num))

NOCACHE指定不缓存任何整数。这可以阻止数据库为序列预分配值,从而避免序列产生不连续的情况,但这回降低性能。序列不连续的情况之所以会发生,是因为在关闭数据库时所缓存的值将全部丢失。如果省略CACHENOCACHE,则数据库默认缓存为20

ORDER确保按照请求次序生成整数,在RAC环境下要用到。

NOORDER不确保按照请求次序生成整数。NOORDER为默认值。

如:createsequence SQ_CHGSERVICEID

minvalue 1

maxvalue 99

start with 1

increment by 1

nocache

cycle;

2.      使用序列

序列生成一系列数字。一个序列中包含两个“伪列”,currvalnextval,可以分别用来获取该序列的当前值和下一个值。在检索序列的当前值是,需要对序列进行初始化,在选择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%以上,索引扫描就不一定快于表扫描了。索引扫描适合返回少量的数据。

 

九、函数

数据库提供了很多函数,这里选择了一些来进行说明,组值函数中的AVGCOUNTMAXMINSUM,再介绍一下格式转换to_charto_date。最后说一下时间函数ADD_MONTHSLAST_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;

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值