建表
建立一个傻乎乎的样例表,方便我讲解
1 2 3 4
| create table employer( ename varchar(10), eid int primary key );
|
建立序列
你首先要有CREATE SEQUENCE或者CREATE ANY SEQUENCE权限,
1 2 3 4 5 6
| CREATE SEQUENCE emp_sequence INCREMENT BY 1 START WITH 1 NOMAXvalue NOCYCLE CACHE 10;
|
CACHE
年少无知的我以为是“开车”,其实是一个缓存池。 Buffer是用来写的,Cache是用来读的。一般的存储都有cache,为了提高性能,写操作在cache上完成就返回给OS了,我们称这种写操作为write back,为了保证掉电时cache中的内容不会丢失,存储都有电池保护,这些电池可以供存储在掉电后工作一定时间,保证cache中的数据被刷入磁盘,不会丢失。
这里可以弄明白cache和buffer
使用序列
插值
在emplyer中插入两行,一个是id为1的Alice,一个是id为2的Sccote
1 2 3
| insert into employer values('Alice',emp_sequence.nextval); insert into employer values('Sccote',emp_sequence.nextval); select * from employer;
|
emp_sequence.nextval 第一次使用时是起点值,之后每一次使用会把emp_sequence.currval的值加一后调用,类似与c++中的++i
查看值
1 2 3
| select emp_sequence.currval from dual; select emp_sequence.nextval from dual; select emp_sequence.currval from dual;
|
聪明的你发现currval变成了3,因为他自加了!!!!
当你加入第三条数据
1 2
| insert into employer values('处女座',emp_sequence.nextval); select * from employer;
|
就变成了
处女座
其实,一般来说标识属性不连续也没关系,只要不重复就行,可是处女座就看不下去了
如果要改变sequence的值变成3,可以有以下两种方法。
Alter
把序列自增为-2,执行一次nextval,然后在把自增改为1.好几把蛋疼!
1 2 3 4 5 6 7 8
| ALTER SEQUENCE emp_sequence INCREMENT BY -2; select emp_sequence.nextval from dual; select emp_sequence.currval from dual; ALTER SEQUENCE emp_sequence INCREMENT BY 1;
|
再drop掉“处女座”,重写添加处女座
1 2 3 4
| Delete from employer Where eid=4; insert into employer values('处女座',emp_sequence.nextval); select * from employer;
|
DROP
删除序列,然后在重建一个从3开始的。则更几把蛋疼。
1
| drop sequence emp_sequence;
|
蛋疼
可能是西裤有点紧吧,蛋蛋疼了一天了。
若果你语句有一个语法错误,比如
1
| insert into employer values(处女座,emp_sequence.nextval);
|
数据是没有加入,但是序列的值它加加了!!!!!!
这尼玛让不让处女座的活了?
~
~
~
~
~
~
~
hiahiahia,然而我是双鱼座的。
求助
帮帮忙