3

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

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

4

3 回答 3

5

PostgreSQL确实有这个概念。

请参阅此处以获取您感兴趣的伪列的简要列表PostgreSQLctid

ctid (tuple identifier)

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

那是Oracle's 的直接模拟rowid

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

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

InnoDB中,表是index organized设计使然,这意味着它们始终具有某种主键,并且InnoDB表上的索引将其PRIMARY KEY用作行指针。

Oracle对于的表也是如此index organized,其中 arowid不是指向数据文件中块的物理指针,而是一个这样的称为logical ROWID,或UROWID

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

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

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

于 2009-05-03T12:57:06.640 回答
0

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

于 2009-05-03T03:26:25.170 回答
0

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

于 2009-05-03T03:30:16.457 回答