是否有一个开源SQL数据库,其中包含Oracle的“ rowid”伪列?
题
我知道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访问的列。如果您定义一个整数主键,则它们将被别名化。