是否有一个开源SQL数据库,其中包含Oracle的“ rowid”伪列?

StackOverflow https://stackoverflow.com/questions/816234

  •  03-07-2019
  •  | 
  •  

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

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

有帮助吗?

解决方案

PostgreSQL 确实有这个概念。

请参阅 此处 ,了解<代码> PostgreSQL ,其中 ctid 是你感兴趣的:

  

ctid(元组标识符)

     

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

这是 Oracle rowid 的直接模拟。

对于 MySQL ,前端的物理位置不可用。

MyISAM 中, rowid 只是一个偏离开头的文件,而这是存储在索引中的内容。

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

对于 Oracle index organized 表也是如此, rowid 不是指向块中的块的物理指针。 datafile,而是一个名为逻辑ROWID UROWID

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

请注意,如果您尚未将任何列定义为 PRIMARY KEY MySQL 将创建一个隐藏的代理 PRIMARY KEY ,您将在其上从来没有任何控制权。

这就是为什么你应该总是在 InnoDB 表中创建一些 PRIMARY KEY :它是免费的,你可以控制列。

其他提示

如果他们都没有这样做,那么没有其他人这样做。

SQLite具有自动递增的“ROWID”您可以使用ROWID,_ROWID或OID访问的列。如果您定义一个整数主键,则它们将被别名化。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top