天天看點

序列(Sequence)和AUTO_INCREMENT

序列(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; 重新設定自增初始值。