暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【OceanBase】有主键表 & 无主键表

3443

主键( Primary Key)  

主键是在数据表中能够唯一标识一行的列的集合。 主键需要满足以下规则:

  • 值不能为 NULL 或空串。
  • 在全表范围内主键列集合的值唯一。
  • 主键的值不允许变更。

有主键表  

有主键表即数据表中包含主键的表, 在 OceanBase 数据库中需要满足以下规则:
  • 每个数据表最多拥有一个主键列集合。
  • 主键列的数量不能超过 64 列, 且主键数据总长度不能超过 16 KB。
在创建有主键表后, 会自动为主键列创建一个全局唯一索引, 可以通过主键快速定位到行。
以下面的 SQL 为例, 创建了一个以 emp_id 为主键的数据表 emp_table, 为有主键表。

1. CREATE TABLE emp_table (
2. emp_id int PRIMARY KEY,
3. emp_name varchar(100),
4. emp_age int NOT NULL
5. );

无主键表

数据表中未指定主键的表称为无主键表, 由于没有全局索引, 无主键表通常使用 ROWID 来快速定位到行。
以下面的 SQL 为例, 数据表 student_table 未指定主键, 为无主键表。

1. CREATE TABLE student_table (
2. student_id int NOT NULL,
3. student_name varchar(100),
4. student_age int NOT NULL
5. );

在 OceanBase 数据库的实现中, 无主键表采用自增列作为隐藏主键。

OceanBase 数据库的自增列是兼容 MySQL 的自增列模块, 满足以下三个原则:

  • 多分区全局唯一
  • 语句内连续递增
  • 生成的自增列值比用户显式插入的大
无主键表利用了自增列的多分区全局唯一的原则, 以此保证无主键表隐藏主键的唯一性。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论