如何列出使用 ATTACH 打开的 SQLite 数据库文件中的表?

在 SQLite 3 命令行工具上使用ATTACH命令将其附加后,可以使用哪种 SQL 列出表以及这些表中的行在 SQLite 数据库文件中?

答案

有一些步骤可以查看 SQLite 数据库中的表:

  1. 列出数据库中的表:

    .tables
  2. 列出表格的外观:

    .schema tablename
  3. 打印整个表:

    SELECT * FROM tablename;
  4. 列出所有可用的 SQLite 提示命令:

    .help

.tables.schema “辅助” 功能不考虑附加的数据库:他们只是查询SQLITE_MASTER表 “主” 数据库。因此,如果您使用

ATTACH some_file.db AS my_db;

那你需要做

SELECT name FROM my_db.sqlite_master WHERE type='table';

请注意,临时表也不会显示.tables :为此,您必须列出sqlite_temp_master

SELECT name FROM sqlite_temp_master WHERE type='table';

看来您需要浏览sqlite_master表,如下所示:

SELECT * FROM dbname.sqlite_master WHERE type='table';

然后使用SELECT或类似方法手动浏览每个表以查看行。

.DUMP.SCHEMA命令似乎根本看不到数据库。

要显示所有表格,请使用

SELECT name FROM sqlite_master WHERE type = "table"

为了显示所有行,我想您可以遍历所有表,并对每个表执行 SELECT *。但是也许您想要的是 DUMP?

使用.help检查可用命令。

.table

此命令将显示当前数据库下的所有表。

SQLite 命令行上有一个可用的命令:

.tables ?PATTERN?      List names of tables matching a LIKE pattern

转换为以下 SQL:

SELECT name FROM sqlite_master
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
WHERE type IN ('table','view')
ORDER BY 1

要列出表,您还可以执行以下操作:

SELECT name FROM sqlite_master
WHERE type='table';

试试PRAGMA table_info(table-name);
http://www.sqlite.org/pragma.html#schema

我使用此查询来获取它:

SELECT name FROM sqlite_master WHERE type='table'

并在 iOS 中使用:

NSString *aStrQuery=[NSString stringWithFormat:@"SELECT name FROM sqlite_master WHERE type='table'"];

根据文档 ,相当于 MySQL 的SHOW TABLES;是:

“.tables” 命令类似于设置列表模式,然后执行以下查询:

SELECT name FROM sqlite_master
  WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%'
UNION ALL
SELECT name FROM sqlite_temp_master
  WHERE type IN ('table','view')
ORDER BY 1;

但是,如果要检查单个表是否存在(或获取其详细信息),请参见@LuizGeron答案。