1锦积、主鍵生成策略:
創(chuàng)建序列:
1背蟆、? 要有創(chuàng)建序列的權(quán)限 create sequence 或 create any sequence
2带膀、? 創(chuàng)建序列的語法
CREATE SEQUENCE?sequence??//創(chuàng)建序列名稱
?????? [INCREMENT BY?n]? //遞增的序列值是n 如果n是正數(shù)就遞增,如果是負數(shù)就遞減 默認是1
?????? [START WITH?n]??? //開始的值,遞增默認是minvalue 遞減是maxvalue
?????? [{MAXVALUE?n?|?NOMAXVALUE}] //最大值
?????? [{MINVALUE?n?|?NOMINVALUE}] //最小值
?????? [{CYCLE |?NOCYCLE}] //循環(huán)/不循環(huán)
?????? [{CACHE?n?| NOCACHE}];//分配并存入到內(nèi)存中
??NEXTVAL 返回序列中下一個有效的值,任何用戶都可以引用
??CURRVAL 中存放序列的當(dāng)前值
??NEXTVAL 應(yīng)在 CURRVAL 之前指定 ,二者應(yīng)同時有效
Create sequence seqEmp increment by 1 start with 1 maxvalue 3 minvalue 1
Cycle cache 2;
//先nextval 后 currval
Select seqEmp.nextval ?from dual;?
Select seqEmp.currval ?from dual;
Cache<max-min/increment
//解釋
{
Create 創(chuàng)建
Sequence 序列 seqEmop 序列名稱
Increment by 步長
Stat with 1 開始值
Maxvalue? 最大值
Minvalue? 最小值
Cycle 循環(huán) nocycle 不循環(huán)
Cache 緩存?? Cache<maxvalue-minvalue/increment by//一般不采用緩存
Nextvalue 下一個
Currval 當(dāng)前值
}
//實例應(yīng)用
//實現(xiàn)id的自動遞增
//第一步
create table cdpt(
id number(6),
name varchar2(30),
constraint pk_id primary key(id)
);
create sequence yytest_id
minvalue 1
maxvalue 999999999999999999999999999
start with 100
increment by 1
cache 100;
insert into cdpt values(seq_cdpt.nextval,’feffefe’);
commit;
select * from cdpt;
//使用序列,會產(chǎn)生裂縫
l???序列在下列情況下出現(xiàn)裂縫:
???回滾
???系統(tǒng)異常
??多個表同時使用同一序列
//修改序列的增量, 最大值, 最小值, 循環(huán)選項, 或是否裝入內(nèi)存
alter SEQUENCE?sequence??//創(chuàng)建序列名稱
?????? [INCREMENT BY?n]? //遞增的序列值是n 如果n是正數(shù)就遞增,如果是負數(shù)就遞減 默認是1
?????? [START WITH?n]??? //開始的值,遞增默認是minvalue 遞減是maxvalue
?????? [{MAXVALUE?n?|?NOMAXVALUE}] //最大值
?????? [{MINVALUE?n?|?NOMINVALUE}] //最小值
?????? [{CYCLE |?NOCYCLE}] //循環(huán)/不循環(huán)
?????? [{CACHE?n?| NOCACHE}];//分配并存入到內(nèi)存中
修改序列的注意事項:
l???必須是序列的擁有者或?qū)π蛄杏?ALTER 權(quán)限
l???只有將來的序列值會被改變
l???改變序列的初始值只能通過刪除序列之后重建序列的方法實現(xiàn)
刪除序列
l???使用DROP SEQUENCE 語句刪除序列
l???刪除之后辞做,序列不能再次被引用
Alter sequence seqEmp maxvalue 5;
Select seqEmp.nextval from dual;