开发笔记_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 层;
                ★ 逻辑性字段字段值很少很少引用 的字段尽量避免建立索引,否则很可能得不偿失。

猜你喜欢

转载自blog.csdn.net/shaotaiban1097/article/details/80487119