【问题标题】:SQlite primary key doesn't work as expetedSQlite 主键不能按预期工作
【发布时间】:2017-04-05 20:08:27
【问题描述】:

我有下表:

    String sqlStatement = "CREATE TABLE " + CallsEntry.TABLE_NAME + "(";
    sqlStatement += CallsEntry.FIELD_CALL_ID + " INT PRIMARY KEY DESC,";
    sqlStatement += CallsEntry.FIELD_CALLER_PHONE + " TEXT,";
    sqlStatement += CallsEntry.FIELD_INSERTION_DATE_MILLIS + " INT); COMMIT;";

    db.execSQL(sqlStatement);

请注意主键是降序的。

然后,根据我使用 SQL Server 的经验,我预计以下查询将按降序生成记录:

SELECT * FROM tblCalls;

但是,事实并非如此。我按升序获取记录。我必须使用这个:

SELECT * FROM tblCalls ORDER BY CallId DESC;

这是为什么呢?我可以做一些不同的事情并按降序获取记录吗?

【问题讨论】:

标签: android sqlite primary-key


【解决方案1】:

SQLite没有默认键顺序之类的东西。

取决于documentation:

如果返回多行的 SELECT 语句没有 ORDER BY 子句,返回行的顺序是 不明确的。或者,如果 SELECT 语句确实有 ORDER BY 子句, 然后附加到 ORDER BY 的表达式列表确定 行返回给用户的顺序。

因此,如果没有ORDER BY 子句,默认顺序会被低估。

【讨论】:

    【解决方案2】:

    这会产生正确的顺序吗?

    SELECT CallId FROM tblCalls
    

    【讨论】:

      猜你喜欢
      • 2016-03-06
      • 1970-01-01
      • 2015-06-26
      • 2013-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多