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
);
主キーを持たないテーブル
データテーブルで主キーが指定されていないテーブルは、主キーを持たないテーブルと呼ばれます。
以下の例のように、データテーブル student_table は主キーが指定されていないため、主キーを持たないテーブルに該当します。
CREATE TABLE student_table (
student_id INT NOT NULL,
student_name VARCHAR(100),
student_age INT NOT NULL
);
OceanBaseデータベースでは、主キーを持たないテーブルはパーティションレベルの自動インクリメント列を隠れた主キーとして使用し、各パーティション内でその列の値が一意であることを保証します。ただし、挿入操作で取得されるパーティションレベルの自動インクリメント列の値は必ずしも厳密に増加するわけではなく、並行挿入やパーティション間の負荷不均衡により、場合によっては自動インクリメント値にジャンプが生じる可能性があります。