OceanBaseデータベースは、主キーを持つテーブルと主キーを持たないテーブルをサポートしています。本記事では、主キーおよび主キーを持つテーブルと主キーを持たないテーブルの使用規則について説明します。
主キー (Primary Key)
主キーとは、データベースのテーブル内で行を一意に識別できる列の集合です。主キーは以下のルールを満たす必要があります:
値は
NULLまたは空文字列にすることはできません。テーブル全体を通じて、主キー列の集合の値は一意である必要があります。
主キーを持つテーブル
主キーを持つテーブルとは、主キーを含むテーブルのことです。OceanBaseデータベースでは、以下のルールを満たす必要があります:
各テーブルは最大1つの主キー列の集合を持つことができます。
主キー列の数は64列を超えてはならず、主キーデータの総長は16KBを超えてはなりません。
主キーを持つテーブルを作成すると、主キー列に対して自動的にグローバル一意のインデックスが作成され、主キーによって行を迅速に特定できるようになります。
以下の例のように、emp_id を主キーとするテーブル emp_table を作成しました。これは主キーを持つテーブルに該当します。
CREATE TABLE emp_table (
emp_id INT PRIMARY KEY,
emp_name VARCHAR(100),
emp_age INT NOT NULL
);
主キーを持たないテーブル
主キーが指定されていないテーブルは、主キーを持たないテーブルと呼ばれます。グローバルインデックスがないため、主キーを持たないテーブルでは通常 ROWID を使用して行を迅速に特定します。
以下の例のように、テーブル student_table は主キーが指定されていないため、主キーを持たないテーブルに該当します。
CREATE TABLE student_table (
student_id INT NOT NULL,
student_name VARCHAR(100),
student_age INT NOT NULL
);
OceanBaseデータベースでは、主キーを持たないテーブルはパーティションレベルの自動インクリメント列を隠れた主キーとして使用し、その列の値が各パーティション内で一意であることを保証します。ただし、挿入操作で取得されるパーティションレベルの自動インクリメント列の値は必ずしも厳密に増分されているわけではなく、並行挿入やパーティション間の負荷不均衡により、場合によっては自動インクリメント値にジャンプが生じることがあります。