资讯详情

数据库-序列

参考ORACLE总结,但测试参考KES和ORACLE

1、创建序列:

CREATE SEQUENCE SEQUENCE_NAME   INCREMENT BY n    START WITH n    MAXVALUE n | NOMAXVALUE    MINVALUE n | NOMINVALUE    CYCLE | NOCYCLE    CACHE n | NOCACHE | ORDER;

INCREMENT BY n 序列增加幅度 START WITH n 序列开始值 MAXVALUE n 序列最大值 MINVALUE n 序列最小值 CYCLE 回收序列号 CACHE n 默认20个序列号缓存数NOORDER模式。 CACHE n ORDER 在RAC中共用一个SEQUENCE的CACHE,NOORDER不共用CACHE。

user_sequences, all_sequences, dba_sequences

SELECT * FROM USER_SEQUENCES  WHERE SEQUENCE_NAME = 'SEQUENCE_NAME';

2、序列管理:

可修改的值:增加、最大、最小、回收、缓存。 无法修改的值:开始值。(oracle限制,KES没有) 修改开始值必须删除重建。

ALTER SEQUENCE SEQUENCE_NAME  INCREMENT BY n  MAXVALUE n  MINVALUE n  CYCLE  CACHE n;

删除和授权:

DROP SEQUENCE sequence_name; GRANT SELECT ON sequence_name TO user_name; GRANT ALTER ANY SEQUENCE;

3.序列的使用:

NEXTVAL 下一个序号 CURRVAL 当前的序号

例:

SELECT sequence_name.nextval FROM dual; SELECT sequence_name.currval FROM dual;

回滚后,序列不能回滚,序列号不连续。

4、Cache设置注意事项:

NOCACHE序列跳号不会造成,但并发性能差会造成row cache lock等待事件。 在RAC环境中SEQUENCE CACHE适量设置较大,避免序列竞争,如每秒数万次SELECT, 并发量很大cache需要设置在100甚至1000以上。

不同cache模式等待事件: NOCACHE --> row cache lock CAHCE NOORDER --> enq: SQ-contention(SQ lock) CACHE ORDER(RAC) --> DFS look handle(SV lock)

五、序列总结

,5.1 思维导图

5.2测试代码

在KES通过测试,在ORACLE验证了一些代码(也应该通过)

------------------------------------- ----序列的测试 -------------------------------------   --最大值10的序列 -- Create sequence  drop sequence if exists SEQ_TEST;--删除序列 create sequence SEQ_TEST maxvalue 9999 minvalue 1000 start with 1000 increment by 2 cache 20 nocycle;   --dual是Oracle中的?个伪表,利利利这个伪表可以设置或查看序列, --或者是调??一些内置函数,可以吗?便的时候。 --序列调用 产生一个新的序列,然后执行一个值 select SEQ_TEST.nextval from dual --查看当前序列的值,重复执行的数字不会改变 select SEQ_TEST.currval from dual --从这个SEQ_TEST在序列中选择下一个数字: SELECT nextval('SEQ_TEST');  --------------------------------- -----------查看序列视图信息--------- --------------------------------- --查看序列视图 select * from user_sequences; select * from all_sequences; select * from dba_sequences;  ---通过序列视图查看指定信息 select min_value,max_value,increment_by,last_number,cycle_flag from dba_sequences where sequence_name = 'SEQ_TEST';  --创建实验表 drop TABLE if exists student;--删除序列 CREATE TABLE student (  stu_nmb number(8),  stu_name char(8) not null,  gender varchar2(2),  age number(2),   --检查约束  class varchar2 (40) not null,  email varchar2 (30),  sdate DATE,  ---执行约束  constraint pk_nmb primary key (stu_nmb),  constraint ck_check check ( gender in (男,女),  constraint ck_age check (age BETWEEN 18 AND 30),   --检查约束  constraint uq_student_email UNIQUE (email) );  --用于生成主键序列 INSERT INTO student VALUES(nextval('SEQ_TEST张德田,男,19,高三第六班,28@qq.com',SYSDATE); INSERT INTO student VALUES(nextval('SEQ_TEST,吴海峰,男,高三第一班@qq.com',SYSDATE); INSERT INTO student VALUES(nextval('SEQ_TEST'),男,20,高三第八班@qq.com',SYSDATE); INSERT INTO student VALUES(nextval('SEQ_TEST宋义,女,20,高三第三班@qq.com',SYSDATE); INSERT INTO student VALUES(nextval('SEQ_TEST,张华乐,女,高三第四班@qq.com',SYSDATE); INSERT INTO student VALUES(nextval('SEQ_TEST'),黎文,女,高三第四班@qq.com',SYSDATE); INSERT INTO student VALUES(nextval('SEQ_TEST吉祥,男,高三第七班,22@qq.com',SYSDATE); INSERT INTO student VALUES(nextval('SEQ_TEST向玲,女,19,高三第一班@qq.com',SYSDATE); INSERT INTO student VALUES(nextval('SEQ_TEST'),梅田田@qq.com',SYSDATE);  select stu_nmb,stu_name from student;  --结果 stu_nmb stu_name 1014 张德田      1018 吴海峰      1020 章德正      1022 宋义       1024 张华乐      1026 黎文       1028 吉祥       1030 向玲       1032 梅田田      ----修改视图 --修改原视图的下列属性 --请注意合理性,以下修改是不合理的,因为start with 1000 alter sequence seq_test minvalue 2000 maxvalue 8000 incremet by 2
cycle 
--对于oracle而言,下列也是不合理的---不支持直接变更起始值
--oracle报错ORA-02283: 无法变更启动序列号
alter sequence seq_test
minvalue 1000
start with 3100
maxvalue 7000
increment by 5
cycle ;

------
--不合理,因为起始值是3100
alter sequence seq_test
minvalue 1000
maxvalue 3000
increment by 5
cycle ;

-----
--1.更改increment为一个你想让序列增加到的值
alter sequence seq_xxrs increment by 1000;
--2.执行一次查询序列的语句
select seq_xxrs.nextval from dual;
--3.然后将increment改回来
alter sequence seq_xxrs increment by 1;
--此时的序列的起始值值就增大了。

---通过序列视图查看指定的信息
select min_value,max_value,increment_by,cycle_flag,start_value
from all_sequences
where sequence_name = 'SEQ_TEST';

标签: nmb悬臂梁传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台