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


什么SQL可用于列出表,以及SQLite数据库文件中这些表中的行 - 一旦我将其附加到 ATTACH SQLite 3命令行工具上的命令?


1021
2017-09-17 12:59


起源


尝试这个你有完整的表格信息 http://www.sqlite.org/pragma.html#schema - Piyush
如果您感兴趣,以下是sqlite的有用GUI: sqlitestudio.pl 使您能够快速查看数据库,表格的详细信息,并拥有一个很好的查询编辑器... - James Oravec
.tables 用于桌子和 .schema ?TABLE? 对于特定表的模式。 - High6
.table 'bank_%' 要么 .table '%_empl' 用于查询前缀/后缀的有效语法! - gavenkoa


答案:


.tables,和 .schema “helper”函数不会查看ATTACHed数据库:它们只是查询 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';

450
2017-09-17 13:30



只要 "SELECT name FROM sqlite_master WHERE type='table'" 适合我 - vladkras
SELECT name FROM my_db.sqlite_master WHERE type ='table';这对我来说不起作用(对于附加的数据库)并且它会抛出错误:不存在这样的表“my_db.sqlite_master” - kanika
你的临时表是什么意思?我刚刚打开SQLite db文件时有没有? - Ewoks
临时表是使用创建的表 CREATE TEMPORARY TABLE SQL命令。当前数据库连接关闭时,它们的内容将被删除,并且它们永远不会保存到数据库文件中。 - Anthony Williams
在sqlite3命令模式下运行 ATTACH "some_file.db" AS my_db;   有效! - John_J


在SQLite数据库中查看表有几个步骤:

  1. 列出数据库中的表:

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

    .schema tablename
    
  3. 打印整个表格:

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

    .help
    

1187
2017-09-17 13:02



.table 和 .tables 都是允许的。对于这个问题, .ta 也会工作,因为sqlite3将接受任何明确的命令。根据帮助的命令名称确实是“.tables”(如果有人仍在关注)。 - dbn
(这应该是公认的答案,它是最常用的做事方式)。 - dbn
.tables 如果一个人打开了数据库,则不会显示表格 ATTACH '<path>' AS <name>;但拉斯的答案会做。由于OP提到了ATTACHing,我相信他不接受这个答案是正确的。编辑:刚才注意到下面的安东尼和其他人也指出了这一点。 - antiplex
@dbw:不是必须的。考虑你正在做一个能够使用SQLite或MySql的DB包装器(我的情况)。如果您使用特定于DB供应商的命令,那么使用更多符合SQL的命令可以更容易地将其他语言包装起来。 - Valentin Heinitz
“... sqlite3将接受任何明确的命令......”不幸的是,有时它也会接受模糊的命令。例如,“。s”被解释为“.show”,即使“.schema”,“。separator”或“.stats”也是可能的。当它不接受模糊命令时,它没有列出可能性。


看起来你需要通过 SQLITE_MASTER 表,像这样:

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

然后手动浏览每个表格 SELECT 或类似的看行。

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


420
2017-09-17 13:01



不容易阅读或记住将来使用的东西;内置的 .tables 命令更直观
@Gryllida:尽管这可以从任何SQL-API中使用,因为它是valide SQL。可能无法随处支持内置命令。 - Valentin Heinitz
@DoktorJ有 .tables 被修改为显示附加数据库中的表? - Lasse Vågsæther Karlsen
在那个数据库中,是的,但这个问题是关于在你附加的数据库中显示表格。有 .tables 命令被修改以显示那些? - Lasse Vågsæther Karlsen
卫生署!阅读理解失败......我以某种方式设法找不到ATTACH参考...两次> _ < - Doktor J


要显示所有表格,请使用

SELECT name FROM sqlite_master WHERE type = "table"

为了显示所有行,我猜你可以遍历所有表,并在每个表上执行SELECT *。但也许DUMP就是您追求的目标?


139
2017-09-17 13:06



感谢唯一真正解决问题的答案......“什么SQL”,而不是什么命令可以使用...谢谢! - Brad Parks
此外,这会打印每行一个表名,而.tables打印多列表名(烦人/无用)。 - Shane


使用 .help 检查可用的命令。

.table

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


65
2017-08-31 04:13



奇怪,它必须是正确的,但是当我使用它时不起作用 - Jürgen K.


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

36
2017-09-17 13:06





要列出表格,您还可以:

SELECT name FROM sqlite_master
WHERE type='table';

34
2017-09-17 13:04





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


26
2018-06-07 02:53



这可能是最好的方法。 - Alix Axel
仅当您知道表的名称时才有效。您不能使用它来获取表名列表。 - Eric W