序列(Sequence)
在Oracle資料庫中,什麼是序列呢?它的用途是什麼?
序列(SEQUENCE)其實是序列号生成器,可以為表中的行自動生成序列号,産生一組等間隔的數值(類型為數字)。
其主要的用途是生成表的主鍵值,可以在插入語句中引用,也可以通過查詢檢查目前值,或使序列增至下一個值。
建立和删除序列
例1:建立序列:
CREATE SEQUENCE ABC INCREMENT BY 1 START WITH 10 MAXVALUE 9999999 NOCYCLE NOCACHE;
執行結果:
序列已建立。
步驟2:删除序列:
DROP SEQUENCE ABC;
執行結果:
序列已丢棄。
說明:以上建立的序列名為ABC,是遞增序列,增量為1,初始值為10。該序列不循環,不使用記憶體。沒有定義最小值,預設最小值為1,最大值為9 999 999。
序列的使用
調用NEXTVAL将生成序列中的下一個序列号,調用時要指出序列名,即用以下方式調用:序列名.NEXTVAL
CURRVAL用于産生序列的目前值,無論調用多少次都不會産生序列的下一個值。如果序列還沒有通過調用NEXTVAL産生過序列的下一個值,先引用CURRVAL沒有意義。
調用CURRVAL的方法同上,要指出序列名,即用以下方式調用:序列名.CURRVAL.
MySql自增長字段
MySQL字段自增長AUTO_INCREMENT
1、建立表時指定AUTO_INCREMENT自增值的初始值(即起始值):
CREATE TABLE XXX (ID INT(5) PRIMARY KEY AUTO_INCREMENT) AUTO_INCREMENT=100;
2、通過 ALTER TABLE 修改初始值(但是要大于表中的 AUTO_INCREMENT 自增值,否則設定無效):
ALTER TABLE XXX AUTO_INCREMENT=100;
3、如果自增序列的最大值被删除了,則在插入新記錄時,該值被重用:
就是說如果表中原本有AUTO_INCREMENT屬性值連續為78、100的值,但100這個資料被删除了,下此再添加資料的時候自增值為101,100被重用了。
即使在你将整個表中的所有資料delete清空後,之前的自增序列最大值還是會被重用。
解決辦法是:
使用 ALTER TABLE XXX AUTO_INCREMENT=0; 重新設定自增初始值。