是否有一个开源SQL数据库,它具有Oracle的"rowid"伪列的概念?

Jam*_*hra 3 sql database oracle rowid

我知道MySQL和PostgreSQL [1] 没有这个概念,所以我有兴趣发现有一个确实有这个概念的开源SQL数据库.

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

Qua*_*noi 5

PostgreSQL 确实有这个概念.

这里的伪列的简短列表在PostgreSQL外面,ctid是您感兴趣的:

ctid (tuple identifier)

描述元组在数据库中的物理位置的标识符.一对数字由ctid表示:块号和该块内的元组索引.

这是直接模拟Oraclerowid.

至于MySQL前端的物理位置不可用于前端.

In MyISAM,rowid只是一个从开头偏移的文件,这是存储在索引中的内容.

InnoDB表中,表是index organized设计的,这意味着它们总是具有某种主键,而InnoDB表上的索引将其PRIMARY KEY用作行指针.

这也是真正Oracleindex organized表,针对其rowid不是物理指针在数据文件的块,而是一个这样叫logical ROWID,或UROWID

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

请注意,如果您尚未将任何列定义为a PRIMARY KEY,MySQL则会创建一个隐藏的代理项PRIMARY KEY,您将永远无法控制该列.

这就是为什么你应该总是PRIMARY KEYInnoDB表中创建某种类型的东西:它是免费的,你可以控制列.