Tüm Ürünler
Search
Belge Merkezi

ApsaraDB RDS:Sequence Engine

Son Güncelleme:Oct 09, 2026

AliSQL, sıra değerlerini almayı basitleştirmek için Sequence Engine özelliğini sunar.

Giriş

Kalıcı veritabanı sistemleri; tek düğümde iş birincil anahtarları, dağıtık sistemlerde genel benzersiz tanımlayıcılar veya birden çok sistem arasında yinelenmezlik kontrolü gibi kullanım durumları için monoton artan benzersiz değerlere ihtiyaç duyar. Farklı veritabanı sistemleri farklı uygulama yöntemleri sunar. Örneğin, MySQL AUTO_INCREMENT niteliğini sağlarken Oracle ve SQL Server SEQUENCE nesnelerini sağlar.

MySQL veritabanlarında, tarih veya kullanıcı ID'si gibi ek bilgilerle birlikte benzersiz bir değeri sarmak istediğinizde AUTO_INCREMENT kullanımı elverişsiz olabilir. Pratikte genellikle aşağıdaki geçici çözümler uygulanır:

  • Sıra değerlerini uygulamadan veya proxy'den oluşturun. Ancak durumu uygulama tarafında tutmak ölçek büyütme ve küçültme işlemlerini karmaşıklaştırır.

  • Sıra değerlerini veritabanındaki simüle edilmiş bir tablodan oluşturun. Bu yöntem, benzersiz değerleri almak için mantığı sarmak ve basitleştirmek amacıyla ara katman gerektirir.

Sequence Engine, diğer veritabanlarının kullandığı yöntemlerle mümkün olduğunca uyumlu olacak şekilde tasarlanmıştır.

Sequence Engine, MySQL depolama motoru arayüzünü uygular ancak kalıcı verileri depolamak için InnoDB veya MyISAM gibi mevcut bir depolama motoru kullanır. Bu sayede XtraBackup gibi üçüncü taraf araçlarla uyumludur. Dolayısıyla Sequence Engine mantıksal bir motordur.

Sequence Engine, NEXTVAL ilerlemesini ve önbellek yönetimini gerçekleştirmek için Sequence Handler arayüzü üzerinden Sequence nesnelerine erişir. Ardından son veri erişimi için istekleri temel tablonun alttaki depolama motoruna iletir.

Ön Koşullar

Örneğiniz aşağıdaki sürümlerden biri olmalıdır:

  • RDS for MySQL 8.4

  • Alt motor sürümü 20190816 veya üzeri olan RDS for MySQL 8,0

  • Alt motor sürümü 20210430 veya üzeri olan RDS for MySQL 5,7

  • Alt motor sürümü 20170901 veya üzeri olan RDS for MySQL 5,6

Not

Bu özellik RDS Enterprise Edition örneklerinde desteklenmez.

Sınırlamalar

  • Sıralar alt sorguları veya join işlemlerini desteklemez.

  • Bir sıranın yapısını görüntülemek için SHOW CREATE TABLE komutunu kullanabilirsiniz.

  • Tablo oluştururken Sequence motorunu belirtemezsiniz. Sıra tabloları yalnızca Sıra oluşturma sözdizimi kullanılarak oluşturulabilir.

Sıra oluşturma

CREATE SEQUENCE [IF NOT EXISTS] <database_name>.<sequence_name>
   [START WITH <constant>]
   [MINVALUE <constant>]
   [MAXVALUE <constant>]
   [INCREMENT BY <constant>]
   [CACHE <constant> | NOCACHE]
   [CYCLE | NOCYCLE]
  ;
Not

Köşeli parantez ([]) içindeki parametreler isteğe bağlıdır.

Aşağıdaki tabloda parametreler açıklanmaktadır.

Parametre

Açıklama

START WITH

Sıranın başlangıç değeri.

MINVALUE

Sıranın minimum değeri.

MAXVALUE

Sıranın maksimum değeri.

Not

NOCYCLE belirtirseniz maksimum değere ulaşıldığında aşağıdaki hata döndürülür:

ERROR HY000: Sequence 'db.seq' has been run out.

INCREMENT BY

Ardışık sıra değerleri arasındaki adım.

CACHE/NOCACHE

Önbellek boyutu. Daha iyi performans için büyük bir önbellek boyutu ayarlayabilirsiniz. Ancak örnek yeniden başlatılırsa önbellekteki kullanılmayan değerler kaybolur.

CYCLE/NOCYCLE

Sıranın tükendikten sonra MINVALUE değerinden yeniden başlayıp başlamayacağını belirtir. Geçerli değerler:

  • CYCLE: Sıranın yeniden başlamasına izin verir.

  • NOCYCLE: Sıranın yeniden başlamasına izin vermez.

Örnek:

create sequence s
       start with 1
       minvalue 1
       maxvalue 9999999
       increment by 1
       cache 20
       cycle;

mysqldump kullanılarak oluşturulan yedeklemelerle uyumluluğu sağlamak için bir sıra tablosu oluşturup ilk kaydı ekleyerek de sıra oluşturabilirsiniz. Örnek:

CREATE TABLE schema.sequence_name (  `currval` bigint(21) NOT NULL COMMENT 'current value',
  `nextval` bigint(21) NOT NULL COMMENT 'next value',
  `minvalue` bigint(21) NOT NULL COMMENT 'min value',
  `maxvalue` bigint(21) NOT NULL COMMENT 'max value',
  `start` bigint(21) NOT NULL COMMENT 'start value',
  `increment` bigint(21) NOT NULL COMMENT 'increment value',
  `cache` bigint(21) NOT NULL COMMENT 'cache size',
  `cycle` bigint(21) NOT NULL COMMENT 'cycle state',
  `round` bigint(21) NOT NULL COMMENT 'already how many round'
) ENGINE=Sequence DEFAULT CHARSET=latin1;

INSERT INTO schema.sequence_name VALUES(0,0,1,9223372036854775807,1,1,10000,1,0);
COMMIT;

Sıra tablosu tanımı

Bir sıra bir tabloda depolanır. Tanımını SHOW CREATE TABLE komutunu çalıştırarak görüntüleyebilirsiniz. Örnek:

SHOW CREATE TABLE schema.sequence_name;

CREATE TABLE schema.sequence_name (
  `currval` bigint(21) NOT NULL COMMENT 'current value',
  `nextval` bigint(21) NOT NULL COMMENT 'next value',
  `minvalue` bigint(21) NOT NULL COMMENT 'min value',
  `maxvalue` bigint(21) NOT NULL COMMENT 'max value',
  `start` bigint(21) NOT NULL COMMENT 'start value',
  `increment` bigint(21) NOT NULL COMMENT 'increment value',
  `cache` bigint(21) NOT NULL COMMENT 'cache size',
  `cycle` bigint(21) NOT NULL COMMENT 'cycle state',
  `round` bigint(21) NOT NULL COMMENT 'already how many round'
) ENGINE=Sequence DEFAULT CHARSET=latin1

Sorgu sözdizimi

Sıralar aşağıdaki sorgu sözdizimlerini destekler:

  • SELECT nextval(<sequence_name>),currval(<sequence_name>) FROM <sequence_name>;

    Not

    RDS for MySQL 8.4, 8,0 ve 5,7 için geçerlidir.

  • SELECT <sequence_name>.currval, <sequence_name>.nextval FROM dual;

    Not

    RDS for MySQL 8.4, 8,0, 5,7 ve 5,6 için geçerlidir.

Örnek:

mysql> SELECT test.currval, test.nextval from dual;
+--------------+--------------+
| test.currval | test.nextval |
+--------------+--------------+
|           24 |           25 |
+--------------+--------------+
1 row in set (0.03 sec)
            
Not

Yeni oluşturulan bir sırayı sorgulayabilmeniz için önce NEXTVAL öğesini bir kez çağırarak sırayı başlatmanız gerekir. Aksi takdirde Sequence 'xxx' is not yet defined in current session hatası döndürülür.

NEXTVAL çağrısı örneği:

SELECT <sequence_name>.nextval FROM dual;