[1] 后来有人指出PostgreSQL确实有rowid伪列。 最佳答案 -6ren">
gpt4 book ai didi

sql - 有没有开源的SQL数据库,有Oracle的 "rowid"伪列的概念?

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:30 24 4
gpt4 key购买 nike

我知道 MySQL 和 PostgreSQL[1] 没有有这个概念,所以我有兴趣找出有这个概念的开源 SQL 数据库。 p>

[1] 后来有人指出PostgreSQL确实有rowid伪列。

最佳答案

PostgreSQL 确实有这个概念。

参见 here PostgreSQL 中伪列的简要列表,其中 ctid 是您感兴趣的:

ctid (tuple identifier)

The identifier which describes the physical location of the tuple within the database. A pair of numbers are represented by the ctid: the block number, and tuple index within that block.

这是 Oraclerowid 的直接模拟。

对于MySQL,前端无法获取行的物理位置。

MyISAM中,rowid只是一个文件从头开始的偏移量,它是存储在索引叶子中的内容。

InnoDB 中,表是按设计索引组织的,这意味着它们总是有某种主键,以及 InnoDB 上的索引code> 表使用 PRIMARY KEY 作为行指针。

Oracleindex organized 表也是如此,rowid 不是指向数据 block 中的 block 的物理指针数据文件,而是一个称为 logical ROWIDUROWID

的文件

如果您从 OracleINDEX ORGANIZED 表中选择一个 ROWID,您将看到它具有不同的格式(类似于 *BAEBwPICwQL+)。这实际上是一个编码的 PRIMARY KEY 值。

请注意,如果您没有将任何列定义为 PRIMARY KEYMySQL 将创建一个隐藏的代理项 PRIMARY KEY,您将永远无法控制。

这就是为什么您应该始终在 InnoDB 表中创建某种类型的 PRIMARY KEY:它是免费的,并且您可以控制该列。

关于sql - 有没有开源的SQL数据库,有Oracle的 "rowid"伪列的概念?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/816234/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com