create sequence autoid
increment by 1
start with 1
minvalue 1
maxvalue 100000

//制作觸發(fā)器
create trigger autoidinsert
before insert on table_name

for each row
begin
select autoid.nextval into:new.autoid from dual;
end;


1:語法:

create sequence <序列名稱>
         start with <
起始數>
         increment by <
增長量>
         [maxvalue  
]
         [minvalue  
]
         [cycle 
當到達最大值的時候,將繼續(xù)從頭開始]
         [Nocycle  -- 
一直累加,不循環(huán)]  
      [Cache ]

2:建表

create table t1( id number(10) primary key, name varchar2(8) ); drop sequence seq1; create sequence seq1; insert into t1(id,name) values(seq1.nextval,'a'); insert into t1(id,name) values(seq1.nextval,'b'); insert into t1(id,name) values(seq1.nextval,'c');

--提交

commit;

select * from t1;

ID

NAME

1

a

2

b

3

c

注意,沒有自動編號類型。

序列是否能連續(xù)

insertinto t1(id,name) values(seq1.nextval,'dddddddddddddddddddddddddd');

--ORA-01401: 插入的值對于列過大

insertinto t1(id,name) values(seq1.nextval,'dd');

--問題:dd的編號是幾?

select * from t1;

ID

NAME

1

a

2

b

3

c

5

dd

思考:為什么會是5,而不是4?

小結:序列有個特性,每個值只能返回一次。而管這個值用在什么地方。

      序列就象一個變局變量(重啟以后仍存在,因為序列也是數據庫對象),可以用在任何地方,所以與表其實沒有關系(可以多個表用一個序列)。

select seq1.nextval x from dual;

X

7

insert into t1(id,name) values(seq1.nextval,e);

--ORA-00984: 列在此處不允許

insertinto t1(id,name) values(seq1.nextval,'e');

select * from t1;

ID

NAME

1

a

2

b

3

c

5

dd

8

e

分析:sql有語法錯誤,所以seq1.nextval沒有執(zhí)行,所以值沒有用掉。

3:序列當前值

select seq1.nextval from dual;

--必須先執(zhí)行nextval以后,currval才能調用。

select seq1.currval from dual;

第一次NEXTVAL返回的是初始值;隨后的NEXTVAL會自動增加你定義的INCREMENT BY值,然后返回增加后的值。CURRVAL 總是返回當前SEQUENCE的值,但是在第一次NEXTVAL初始化之后才能使用CURRVAL,否則會出錯。一次NEXTVAL會增加一次SEQUENCE的值

4:如何修改序列

  修改前提是sequence owner,或者有ALTER ANY SEQUENCE 權限才能改動sequence. 可以alterstart至以外的所有sequence參數.如果想要改變start值,必須 drop sequence  re-create .
  
 
  
  影響Sequence的初始化參數:
SEQUENCE_CACHE_ENTRIES =
設置能同時被cachesequence數目。

也可以這樣
alter sequence mySeq maxvalue 500
注意:不能改start with,其他隨便改(設置minvalue值的時候不能大于當前值)

 Alter sequence 的例子:  ALTER SEQUENCE emp_sequence   INCREMENT BY 10   MAXvalue 10000   CYCLE   -- 到10000后從頭開始  NOCACHE