代码之家  ›  专栏  ›  技术社区  ›  James Mishra

有没有一个开源的SQL数据库具有Oracle的“rowid”伪列的概念?

  •  3
  • James Mishra  · 技术社区  · 16 年前

    我知道mysql和postgresql[1]可以 有了这个概念,所以我有兴趣发现有一个开源的SQL数据库确实有这个概念。

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

    3 回复  |  直到 16 年前
        1
  •  5
  •   Quassnoi    16 年前

    PostgreSQL 确实有这个概念。

    here 获取中的伪列的简短列表 波斯特雷斯尔 ,其中 ctid 您感兴趣:

    ctid (tuple identifier)

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

    这是直接模拟 Oracle rowid .

    至于 MySQL ,前端不提供行的物理位置。

    MyISAM , 罗维德 只是一个文件从开始的偏移量,这就是索引叶中存储的内容。

    InnoDB 表是 index organized 按设计,这意味着它们总是具有某种主键,并且索引 诺伊德 表使用 PRIMARY KEY 作为行指针。

    这也适用于 甲骨文公司 索引组织 表,其中 罗维德 不是指向数据文件中块的物理指针,而是 logical ROWID UROWID

    如果选择 ROWID 从一个 INDEX ORGANIZED 表中 甲骨文公司 ,您将看到它有不同的格式(例如 *BAEBwPICwQL+ )这实际上是一个编码的 主键 价值。

    请注意,如果没有将任何列定义为 主键 , MySQL 将创建隐藏的代理项 主键 你永远无法控制。

    这就是为什么你应该创造一种 主键 在一个 诺伊德 表:它是免费的,您可以控制列。

        2
  •  0
  •   Francis    16 年前

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

        3
  •  0
  •   Steven Canfield    16 年前

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