Oracle学习笔记 _10_序列

 

Oracle学习 第10天

            —— 序列(Sequence)

                当在开发中,我们查询到一组数据,希望这组数据带有一列自增的编号时。

               

                在MySQL数据库中,字段可以设置一种类型,AUTO_INCREMENT(自增)。当一个字段设置 AUTO_INCREMENT 类型后,给定一个初始的数字,之后每加入一条新的记录,该条记录的这个字段的值都会在原来的基础上加1。这个属性也经常和主键组合使用。

                在SQLServer中,则拥有的是 IDENTIFY 属性,同样实现自增的功能,其拥有两个参数,即自增的最小值和最大值。 

                而在Oracle中,类似的功能我们就需要使用序列来完成。

 

创建序列

 

CREATE SEQUENCE mysequence     -- 创建序列名称 
START WITH 1                   -- 开始值 
INCREMENT BY 1                 -- 增长值 
MINVALUE 1                     -- 最小值 
MAXVALUE 100                   -- 最大值 
CYCLE                          -- 循环 CYCLE /不循环 
NOCYCLE NOCACHE                -- 缓存 CACHE /不缓存 NOCACHE 
-- 关于缓存:举例 CACHE 10 表示一次产生 10 个编号,提高计算效率,但不稳定。当一次产生10个号但并没有使用完而意外中断时,有可能会产生跳号现象。
 

Sequence 和 TABLE 等都属于数据对象,都可以在PLSQL 的 Object中直接查找到。

 

使用序列

                序列一般情况下都是与主键或者其他具有唯一约束的列组合使用。

                序列只能与NUMBER类型搭配使用,因为只有NUMBER类型才可以自增。

CREATE TABLE test1(userid NUMBER PRIMARY KEY , username VARCHAR2(20));
INSERT INTO test1 VALUES(mysequence.nextval,'Nick');
INSERT INTO test1 VALUES(mysequence.nextval,'John');
SELECT * FROM test1;

正常情况下,这里序列号应该为 1 和 2 。

因为初始值是 1 ,第一个NEXTVAL值是初始化值,第二个开始才按照规则自增。

但这里出现 2 和 3 。原因如下:

                Oracle 11 版本之后,当Oracle新表使用序列作为 INSERT 值时,默认使用“延迟段” 功能。该功能是Oracle 11 之后的版本才具有。可以使用如下语句进行关闭:

 

ALTER 用户名 SET deferred_segment_creation = FALSE;

 

查看序列

SELECT mysequence.currval FROM dual;

 

查看某个序列当前增长到多少。

 

 

★ 注意:

                序列是数据库对象,可以多个用户共享使用, 调用方法与TABLE的调用相同

 

                CURRVAL 功能 返回当前序列的值。但是,一定要在第一次 NEXTVAL 初始化之后才可以使用,否则会报错。

                第一次 NEXTVAL 返回的是初始值(需要注意的是在Oracle11之后的版本中,直接插入序列时第一个NEXTVAL返回的有可能不是初始值,具体原因上面红字部分有解释)。

 

 

索引

                索引最大的作用就是帮助用户极大的提升查询、分组、排序的效率。但同时也会占用很大的内存空间。

                

        单列索引

CREATE INDEX 索引名 on 表名(列名);

        复合索引

 

CREATE INDEX 索引名 on 表名(列名1, 列名2);

 

创建索引

CREATE TABLE TEST1(NAME VARCHAR2(20), JOB VARCHAR2(10), DEPTNO NUMBER);
CREATE INDEX inx_name ON TEST1(NAME);

★ 注意:               

                刚刚说过,索引虽然能极大的提升查询的效率,但同时也占用很大的空间,降低数据增删改的效率。

                并且,索引也需要定期单独的维护更新来保持和数据的一致性。

                所以,不恰当的索引不但不会增加效率,反而会大幅度的降低系统的性能。

                正确的创建索引对数据库的效率而言是非常重要的。

                索引创建的三大原则

                                1、数据量越大的表,创建索引越有意义;

                                2、索引尽量创建在经常使用 WHERE 条件或连接条件 的列上;

                                3、索引创建的层次一般尽量不要超过 4 层;

                ★ 逻辑性字段字段值很少很少引用 的字段尽量避免建立索引,否则很可能得不偿失。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HolaSecurity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值