すべてのプロダクト
Search
ドキュメントセンター

PolarDB:シーケンスエンジン

最終更新日:May 24, 2024

PolarDB-X Standard Editionは、シーケンスエンジン機能を提供します。 この機能により、PolarDB-Xインスタンスでシーケンスエンジンを使用して、シーケンス値を効率的に生成できます。

シーケンスエンジンの概要

ほとんどの場合、単調に増加する一意のシーケンス値は、単一ノード永続データベースシステムのプライマリキー、分散永続データベースシステムのグローバル一意識別子 (GUID) 、および複数の永続データベースシステム間のべき等性に必要です。 各データベースエンジンは、シーケンス値が一意であることを保証するために一意の方法を使用する。 たとえば、MySQLはAUTO_INCREMENT属性を提供し、OracleおよびSQL ServerはSEQUENCE属性を提供します。

MySQLデータベースでは、AUTO_INCREMENT属性を使用して日付やユーザー名などの一意のシーケンス値をカプセル化するプロセスに時間がかかります。 次のメソッドを使用して、一意のシーケンス値を効率的に生成できます。

  • アプリケーションまたはプロキシを使用してシーケンス値を生成します。 この方法の欠点は、シーケンス値のステータスがアプリケーションに送信されることにある。 この欠点は、スケーリングをより複雑にする。

  • シミュレートされたテーブルを使用してシーケンス値を生成します。 この方法では、ミドルウェアをインストールする必要があります。 ミドルウェアは、生成されたシーケンス値を取得するために使用されるロジックをカプセル化および簡略化するために使用されます。

シーケンスエンジンは、さまざまなデータベースエンジンと互換性があり、シーケンス値をより効率的に生成するのに役立ちます。

シーケンスエンジンは、MySQLで使用されるさまざまなストレージエンジンと互換性があります。 ただし、基になる永続データは、InnoDBやMyISAMなどの既存のストレージエンジンを使用して保存されます。これにより、XtraBackupなどのサードパーティ製ツールとの互換性が確保されます。 したがって、シーケンスエンジンは論理エンジンとしてのみ使用されます。

シーケンスエンジンは、シーケンスハンドラを使用してシーケンスオブジェクトにアクセスする。 これにより、NEXTVAL演算子を使用してシーケンスの値を増やし、キャッシュされたデータを管理できます。 データは基になる基本テーブルエンジンに送信されます。 ビジネス要件に基づいて、基になるベーステーブルエンジンからデータにアクセスできます。

前提条件

インスタンスのエディションはPolarDB-X Standard editionで、エンジンはMySQL 8.0です。

制限事項

  • シーケンスエンジンは、サブクエリまたはJOINクエリをサポートしていません。

  • SHOW CREATE TABLEステートメントを使用して、シーケンスにアクセスできます。

  • テーブルを作成するときに、シーケンスエンジンを指定することはできません。 テーブルにシーケンスエンジンを指定する場合は、「シーケンスの作成」で説明されている文を実行する必要があります。

シーケンスを作成するCreate a sequence

シーケンスを作成するには、次のステートメントを実行します。

CREATE SEQUENCE [存在しない場合] <データベース名>.<シーケンス名>
   [<定数> で開始]
   [MINVALUE <定数>]
   [MAXVALUE <定数>]
   [<定数> による増加]
   [CACHE <constant> | NOCACHE]
   [サイクル | NOCYCLE]
  ;
説明

上記のステートメントを実行するときは、角かっこ ([]) で囲まれたパラメーターを設定する必要があります。

次の表に、ステートメントのパラメーターを示します。

パラメーター

説明

START WITH

シーケンスの開始値。

マリンバル

シーケンスの最小値。

MAXVALUE

シーケンスの最大値。

説明

シーケンスにNOCYCLEオプションが指定されている場合、最大値に達すると次のエラーが報告されます。error HY000: シーケンス 'db.seq' が実行されました。

による増加

シーケンスの値が増加する増分。

キャッシュ /NOCACHE

キャッシュのサイズ。 より大きなキャッシュサイズを指定して、インスタンスのパフォーマンスを向上させることができます。 インスタンスを再起動すると、キャッシュに保存されているシーケンス値が失われます。

CYCLE /NOCYCLE

最大値に達した後、シーケンスの値をMINVALUEパラメーターで指定された最小値にリセットするかどうかを指定します。 有効な値:

  • CYCLE: シーケンスの値は、最大値に達した後に最小値にリセットされます。

  • NOCYCLE: 最大値に達した後、シーケンスの値は最小値にリセットされません。

例:

シーケンスを作成する
       1で始まる
       minvalue 1
       maxvalue 9999999
       increment by 1
       キャッシュ20
       サイクル; 

mysqldump拡張機能を使用してインスタンスをバックアップする場合は、シーケンステーブルを作成し、シーケンステーブルに最初の行を挿入できます。 例:

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' すでにラウンド数'
) エンジン=シーケンスデフォルトCHARSET=latin1;

INSERT INTO schema.sequence_name VALUES(0,0、1,9223372036854775807、1,1、10000,1、0);
コミット; 

シーケンステーブルの概要

シーケンスは、デフォルトのストレージエンジンを使用して作成されたテーブルに格納されます。 シーケンスをクエリすると、デフォルトのストレージエンジンを使用して作成されたテーブルが返されます。 例:

SHOW CREATE TABLE schema.sequence_name;

CREATE TABLEスキーマ。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' すでにラウンド数'
) エンジン=シーケンスデフォルトCHARSET=latin1 

クエリ構文

シーケンスエンジンは、次の構文をサポートします。

  • SELECT nextval(<シーケンス名>) 、currval(<シーケンス名>) FROM <シーケンス名>;

  • SELECT <シーケンス名>.currval, <シーケンス名>.nextval FROM dual;

例:

mysql> SELECT test.currval、test.nextval from dual;
+ ------------ ------------------- +
| test.currval | test.nextval |
+ ------------ ------------------- +
| 24 | 25 |
+ ------------ ------------------- +
1行セット (0.03秒) 
説明

新しいシーケンスの値を照会する前に、次のステートメントを実行してシーケンスのNEXTVALを呼び出す必要があります。 それ以外の場合、現在のセッションエラーメッセージでシーケンス 'xxx' がまだ定義されていません。

例:

SELECT <シーケンス名>.nextval FROM dual;