温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

主键和rowid关系

发布时间:2026-09-23 17:31:52 来源:亿速云 阅读:91 作者:小樊 栏目:数据库

在数据库(尤其是 Oracle)中,主键(Primary Key) 和 ROWID 是两个不同层面但经常被一起讨论的概念。下面从“是什么、关系、区别、使用场景”来说明。


一、什么是主键(Primary Key)

主键是逻辑层面的概念:

  • 由表设计者定义
  • 用于唯一标识一行数据
  • 不能为 NULL,不能重复
  • 通常有索引(唯一索引)

示例:

CREATE TABLE user (
  id NUMBER PRIMARY KEY,
  name VARCHAR2(50)
);

这里 id 是主键。


二、什么是 ROWID

ROWID是物理层面的概念(以 Oracle 为例):

  • 由数据库自动生成
  • 表示行在数据文件中的物理位置
  • 每插入一行,Oracle 就分配一个 ROWID
  • 用户一般不直接维护

示例:

SELECT rowid, id, name FROM user;

ROWID 类似:

AAAR3sAABAAAWBoAAA

三、主键和 ROWID 的关系

1️⃣ 都能“定位一行”

  • 主键:通过业务含义定位
  • ROWID:通过物理位置定位

2️⃣ 主键 ≠ ROWID

对比项 主键 ROWID
是否用户定义 ✅ 是 ❌ 否
是否可修改 ❌ 一般不能 ❌ 不能
是否物理存储位置 ❌ 否 ✅ 是
行被删除后 主键可能复用 ROWID 可能复用
表迁移后 不变 可能变

四、关键区别(很重要)

❗ ROWID 不稳定

  • 表发生:
    • 导出导入
    • 表重建
    • 分区移动
  • ROWID 可能改变

而主键是逻辑稳定标识


五、常见使用场景

✅ 用 ROWID 的场景

  • 快速更新/删除某一行(性能最好)
DELETE FROM user WHERE rowid = 'AAAR3sAABAAAWBoAAA';

✅ 用主键的场景

  • 业务系统、接口、关联表
  • 跨系统数据标识

六、一个常见误区

“ROWID 可以当主键用吗?”

❌ 不推荐:

  • ROWID 不是业务含义
  • 表结构变化后失效
  • 不适合作为外键

七、一句话总结

主键是“这行是谁”,ROWID 是“这行在哪”。

如果你指的是 MySQL / PostgreSQL 而不是 Oracle,我也可以针对性说明(例如 MySQL 的隐藏 _rowid 或 InnoDB 的聚簇索引)。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手