MariaDB

參考資料:(https://mariadb.com/kb/en/library/sequences/)

Sequence

CREATE SEQUENCE 序列名稱

*這是在 MariaDB 10.3 之後才引入的功能

序列是一個生成數值序列的對象。

如果希望控制更多序列號的生成,SequenceAUTO_INCREMENT 的替代方案。

CREATE SEQUENCE 序列名稱 START WITH 起始數字 INCREMENT BY 每次增加多少 ;

取得 Sequence

SELECT NEXT VALUE FOR SEQ_NAME;
OR
SELECT NEXTVAL(SEQ_NAME);

#For Oracle
seqName.nextval;

注意,這個方式只可以用在 CREATE TABLE 的時候。之後要 ALTER TABLE 的時候會被 DENY。

不過習慣上似乎不會這樣寫,通常是在程式 SELECT NEXTVAL(SEQ_NAME),再塞入 SEQ,沒塞就讓資料庫噴錯,用來提示程式人員忘記塞。(不建議讓資料庫幫我們塞)

*在 MariaDB 中,Sequence 作為一種特殊的 表實現,他使用與表相同的命名空間。

好處是序列顯示在 SHOW TABLES 中,可以用 CREATE TABLE & DROP TABLE 去創建序列。

但由於序列在上下文中充當常規表,所以它們將受到 LOCK TABLE 的影響。而這在其他 DBMS 中不是這種情況。

Sequence 作為表格 Primary Key

create sequence seqName;
create table tableName (
    field1 int primary key default (next value for seqName),
    field2 int
);

修改 Sequence 的值

ALTER SEQUENCE seqName RESTART 50;

還有一個方法 SETVAL。

但這個方法只可以改大,如果嘗試改成較小的值,會失敗,return null

serval(seqName, 50);

將 Sequence 移除

DROP SEQUENCE seqName;

#因為 MariaDB 將 Sequence 也視為 Table,所以下列這行也可以
DROP TABLE seqName;

Last updated