informix自10開始可以產(chǎn)生序列(sequence)。序列(sequence)有時(shí)候也被叫做序列產(chǎn)生器(sequencegenerator)或序列對象(sequence object)。它產(chǎn)生一個(gè)單調(diào)增或單調(diào)減的整數(shù)序列。
創(chuàng)建序列:
CREATE SEQUENCE seq_2 INCREMENT BY1 START WITH 1
MAXVALUE30
MINVALUE 0
NOCYCLE
CACHE10
ORDER; 上面示例中創(chuàng)建了一個(gè)名為seq_2的序列,該序列產(chǎn)生從1到30的單調(diào)遞增1的整數(shù),如果大小超過30則報(bào)8313(超過最大值)錯(cuò)誤。這里的NOCYCLE選項(xiàng)表示如果產(chǎn)生的整數(shù)大于最大值后則停止生成整數(shù),若設(shè)為CYCLE則將從開始值重新開始生成數(shù)據(jù)。改變序列:
ALTERSEQUENCE seq_2 RESTART WITH 5 INCREMENT by 2 MAXVALUE300;該實(shí)例修改seq_2為產(chǎn)生從5開始,最大值300,每次遞增2的序列重命名序列:rename sequence seq_2 to seq_3該語句修改seq_2的名字為seq_3,但功能不變。刪除序列:DROP SEQUENCE seq_2;該語句刪除序列seq_2。
使用序列CREATE TABLE tab1 (col1 int, col2int); INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL) --用序列seq_2的下一個(gè)值和當(dāng)前值插入表tab1
SELECT * FROM tab1; col1 col2 1 1ALTER SEQUENCE seq_2 RESTART WITH 5 INCREMENT by 2 MAXVALUE 300;--修改序列 INSERT INTO tab1 (col1, col2) VALUES (seq_2.NEXTVAL, seq_2.NEXTVAL)--再次插入數(shù)據(jù)SELECT * FROM tab1; col1 col2 1 1 5 5當(dāng)序列產(chǎn)生的值超過最大值時(shí),則會(huì)出現(xiàn)如下錯(cuò)誤:8313: Sequence (informix.seq_2) exceeds itsMAXVALUE.要注意的是:
①第一次nextval返回的是初始值;隨后的nextval會(huì)自動(dòng)增加你定義的incrementby值,然后返回增加后的值。
currval總是返回當(dāng)前sequence的值,但是在第一次nextval初始化之后才能使用currval,否則會(huì)出錯(cuò)。
一次nextval會(huì)增加一次sequence的值。但是如果你在同一個(gè)條SQL語句里面針對同一個(gè)sequence使用多次nextval,其值都是一樣的。
②如果指定cache值,就可以預(yù)先在內(nèi)存里面放置一些sequence,這樣存取的快些。cache里面的取完后,自動(dòng)再取一組到cache。使用cache或許會(huì)跳號, 比如數(shù)據(jù)庫突然不正常down掉(shutdown abort),cache中的sequence就會(huì)丟失.所以可以在create sequence的時(shí)候用nocache防止這種情況
總之,使用序列(sequence)可以快速的插入有序的不重復(fù)數(shù)據(jù),這對于某些需要產(chǎn)生大量不重復(fù)整數(shù)的環(huán)境中十分有用,但序列只能產(chǎn)生有序的整數(shù)數(shù)據(jù),也因此限制了該用法的使用場景。但不管怎樣,有了序列總能使我們的一些操作變得輕松便利
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點(diǎn)擊舉報(bào)。