【问题标题】:SQLite Find ROWID of most recent or next ROWIDSQLite 查找最近或下一个 ROWID 的 ROWID
【发布时间】:2014-02-15 20:55:11
【问题描述】:

所以我有一张包含图像数据的表格。表格看起来像这样......

ROWID|title|description|file_path

文件路径包含图像的名称。我想重命名图像以匹配 ROWID。

如何获取最新的 ROWID?我还需要考虑已删除的行,因为我将其用作自动增量主键。因为,如果表中的一行已被删除,则表可能看起来像这样......

1|title A|description A|..\fileA.jpg
2|title B|description B|..\fileB.jpg
5|title E|description E|..\fileE.jpg
7|title G|description G|..\fileG.jpg

除此之外,可能有一行或多行已被删除,因此就我所知,下一个 ROWID 可能是 10。

我还需要考虑一个新表或一个已删除所有数据的表,并且下一个 ROWID 可能是 1000。

总之,我想真正的问题是;有没有办法找出下一个 ROWID 是什么?

【问题讨论】:

标签: sqlite rowid


【解决方案1】:

如果您在主键字段中指定了 AUTOINCREMENT 并且表不为空,则此查询将返回表 MY_TABLE 的最新 ROWID:

SELECT seq
FROM sqlite_sequence 
WHERE name = 'MY_TABLE'

【讨论】:

    【解决方案2】:

    什么语言?看起来c API具有以下功能:

    sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
    

    http://www.sqlite.org/c3ref/last_insert_rowid.html

    你也可以这样做:

    select MAX(rowid) from [tablename];
    

    【讨论】:

      【解决方案3】:

      不幸的是,这些方法都没有完全按照我需要的方式工作,但我最终做的是......

      将数据插入表中,其中包含我需要填充“aaa”的 rowid 的字段 然后用数据更新行。

      这似乎解决了我当前的问题。希望它不会导致另一个问题。

      【讨论】:

        【解决方案4】:

        我认为last_insert_rowid 通常是你想要的。

        请注意,根据自动增量标志,rowid 的行为会有所不同——它要么单调递增,要么假定任何空闲 id。不过,这通常不会影响任何较小的用例。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-22
          • 1970-01-01
          • 2016-05-04
          • 1970-01-01
          • 1970-01-01
          • 2015-03-20
          • 1970-01-01
          • 2011-05-09
          相关资源
          最近更新 更多