在数据库(尤其是 Oracle)中,主键(Primary Key) 和 ROWID 是两个不同层面但经常被一起讨论的概念。下面从“是什么、关系、区别、使用场景”来说明。
主键是逻辑层面的概念:
示例:
CREATE TABLE user (
id NUMBER PRIMARY KEY,
name VARCHAR2(50)
);
这里 id 是主键。
ROWID是物理层面的概念(以 Oracle 为例):
示例:
SELECT rowid, id, name FROM user;
ROWID 类似:
AAAR3sAABAAAWBoAAA
| 对比项 | 主键 | ROWID |
|---|---|---|
| 是否用户定义 | ✅ 是 | ❌ 否 |
| 是否可修改 | ❌ 一般不能 | ❌ 不能 |
| 是否物理存储位置 | ❌ 否 | ✅ 是 |
| 行被删除后 | 主键可能复用 | ROWID 可能复用 |
| 表迁移后 | 不变 | 可能变 |
而主键是逻辑稳定标识
DELETE FROM user WHERE rowid = 'AAAR3sAABAAAWBoAAA';
“ROWID 可以当主键用吗?”
❌ 不推荐:
主键是“这行是谁”,ROWID 是“这行在哪”。
如果你指的是 MySQL / PostgreSQL 而不是 Oracle,我也可以针对性说明(例如 MySQL 的隐藏 _rowid 或 InnoDB 的聚簇索引)。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。