OceanBaseデータベースは、主キー付きテーブルと主キーなしテーブルをサポートしています。本記事では、主キーおよび主キー付きテーブルと主キーなしテーブルの使用規則について説明します。
主キー(Primary Key)
主キーとは、データベースのテーブル内で1行を一意に識別できる列の集合です。主キーは以下のルールを満たす必要があります:
値は
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データベースでは、主キーなしテーブルはパーティション単位の自動インクリメント列を隠れた主キーとして使用し、この列の各パーティション内での値が一意であることを保証します。ただし、挿入操作で取得されるパーティション単位の自動インクリメント列の値は必ずしも厳密に増加するわけではなく、並行挿入やパーティション間の負荷不均衡により、場合によっては自動インクリメント値にジャンプが生じる可能性があります。