我在SQLite数据库中有一列名为id
的列,该列是自动递增的,主键,唯一。
以下查询的结果是否保证是数据库中id
的最小值,并且这是否对应于要插入的“最旧”(如FIFO中)行?
SELECT id FROM table LIMIT 1
答案 0 :(得分:2)
SQLite documentation非常明确:
如果返回多行的SELECT语句没有 ORDER BY子句,返回行的顺序为 未定义。或者,如果SELECT语句确实具有ORDER BY子句, 然后附加到ORDER BY的表达式列表确定 将行返回给用户的顺序。
LIMIT
将在ORDER BY
之后应用 ,因此我认为它不会影响此语句的应用。
因此,如果要第一行,请使用ORDER BY
:
SELECT id
FROM table
ORDER BY id
LIMIT 1;
请注意,如果id
是主键,则基本上不会增加开销。
我应该强调在实践中,您可能会获得没有ORDER BY
的最小ID。但是,依赖与文档直接矛盾的行为是一个非常非常糟糕的主意。
答案 1 :(得分:0)
以下查询的结果是否保证是数据库中id的最小值
是的。但是,如果表为空或id
列为NULL,则它也可能返回NULL
这是否对应于要插入的“最旧的”(如FIFO中的)行?
不,不能保证。