3

如果您在任何 sqlite 数据库中有多个表,如何获取它们是否具有自动增量主键的信息?

例如,我已经知道您可以通过简单地查询来获取有关表列的一些信息:pragma table_info(tablename_in_here)

动态获取自动增量列比在源代码中使用布尔值设置每个相应的模型要好得多。

编辑:
让我以这张表为例:

CREATE TABLE "test" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
"name" TEXT NOT NULL
)

这是执行后的结果表pragma table_info("test")

cid | name | type    | notnull | dflt_value | pk
  0 |   id | INTEGER |       1 |       null |  1
  1 | name |    TEXT |       1 |       null |  0

如您所见,没有关于该id列是否为自动增量的信息

Edit2:
我正在寻找一个直接通过语句涉及 sqlite 的解决方案。不能使用终端中的命令以某种方式从内部解析所需信息的
特殊情况。它们在不允许您以编程方式在终端中执行命令的情况下不起作用。就像在 Android 应用程序中一样。sqlite3

4

2 回答 2

4

自动递增的主键必须声明INTEGER PRIMARY KEY或等效的,因此您可以使用table_info日期来检测它们。

INTEGER PRIMARY KEY如果在PRAGMA table_info输出中,列是列,

  • typeisintegerINTEGER或任何其他不区分大小写的变体;和
  • pk已设置;和
  • pk没有为任何其他列设置。

要检查列定义是否包含AUTOINCREMENT关键字,您必须直接查看sqlite_master表;SQLite 没有其他机制可以访问此信息。如果此查询返回一条记录,则说明您AUTOINCREMENT在表定义中的某处有关键字(如果注释掉该词,可能会返回错误结果):

SELECT 1
FROM sqlite_master
WHERE type = 'table'
  AND name = 'tablename_in_here'
  AND sql LIKE '%AUTOINCREMENT%'
于 2013-09-09T09:06:35.180 回答
0

您可以解析.schema. 这将为您提供用于创建表的 sql 命令。如果声明了自动增量,您将在输出中看到它。这样做的好处是它也会列出所有表格。

于 2013-09-09T13:30:17.963 回答