基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
主键表和无主键表
更新时间:2024-12-06 14:01:02
OceanBase 数据库支持主键表和无主键表。本文主要介绍主键以及有主键表和无主键表的使用规则。
主键(Primary Key)
主键是在数据库的表中能够唯一标识一行的列的集合。主键需要满足以下规则:
值不能为
NULL或空字符串在全表范围内主键列集合的值唯一
有主键表
有主键表即表中包含主键的表,在 OceanBase 数据库中需要满足以下规则:
每个表最多拥有一个主键列集合
主键列的数量不能超过 64 列,且主键数据总长度不能超过 16 KB
在创建有主键表后,会自动为主键列创建一个全局唯一索引,可以通过主键快速定位到行。
如下例所示,创建了一个以 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 数据库中,无主键表使用分区级自增列作为隐藏主键,确保该列在每个分区内的值唯一。然而,插入操作获取的分区级自增列值不一定是严格递增的,可能由于并发插入或分区负载不均等导致某些情况下自增值存在跳跃。