码农家园

关闭
导航

关于SQL:如何列出用Attach打开的sqlite数据库文件中的表?


databasemetadatasqlsqlitesqlite3

How to list the tables in a SQLite database file that was opened with ATTACH?

什么SQL可以用来列出表,以及sqlite数据库文件中这些表中的行-在我将它与sqlite 3命令行工具上的ATTACH命令附加之后?

相关讨论

  • 试试这个,你得到了表的完整信息http://www.sqlite.org/pragma.html schema
  • 如果您感兴趣,下面是一个有用的sqlite图形用户界面:sqlitestudio.pl让您可以快速查看数据库、表的详细信息,并且有一个很好的查询编辑器…
  • 表的.tables和特定表的模式的.schema ?TABLE?。
  • .table 'bank_%'或.table '%_empl'也是查询前缀/后缀的有效语法!


有几个步骤可以查看SQLite数据库中的表:

  • 列出数据库中的表:

    1
    .tables
  • 列出表的外观:

    1
    .schema tablename
  • 打印整个表格:

    1
    SELECT * FROM tablename;
  • 列出所有可用的sqlite提示命令:

    1
    .help
  • 相关讨论

    • 允许使用.table和.tables。因此,.ta也可以工作,因为sqlite3将接受任何明确的命令。根据帮助,命令的名称实际上是".tables"(如果有人仍在关注)。
    • (这应该是公认的答案,这是最sqlite-y的方法)。
    • 如果一个通过ATTACH '' AS ;打开的数据库,.tables将不显示表,但lass的答案会显示。既然OP提到了附件,我相信他不接受这个答案是对的。编辑:刚刚注意到安东尼和下面的其他人也指出了这一点。
    • @DBW:没有必要。假设您正在做一个能够使用sqlite或mysql的db包装器(我的例子)。使用更多的符合SQL的命令将使用其他语言移植包装的更容易,如果您要使用特定于DB供应商的命令的话。
    • "…sqlite3将接受任何明确的命令…"不幸的是,有时它也接受不明确的命令。例如,".s"被解释为".show",即使".schema"、".separator"或".stats"也是可能的。当它不接受一个含糊不清的命令时,它不会列出可能性。
    • 这些命令不适用于ATTACH数据库。
    • @见鬼,他的回答可能只是:.tables。


    .tables和.SCHEMA的"helper"函数不查找附加的数据库:它们只查询SQLITE_MASTER表中的"main"数据库。因此,如果您使用

    1
    ATTACH some_file.db AS my_db;

    那么你需要做

    1
    SELECT name FROM my_db.sqlite_master WHERE TYPE='table';

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

    1
    SELECT name FROM sqlite_temp_master WHERE TYPE='table';
    相关讨论

    • 只有"SELECT name FROM sqlite_master WHERE type='table'"对我有效
    • 从'u db.sqlite_master'中选择名称,其中type='table';这对我(对于附加的db)不起作用,并引发错误:不存在这样的表'my_db.sqlite_master'
    • 临时桌是什么意思?我刚打开sqlite db文件时有没有?
    • 临时表是使用CREATE TEMPORARY TABLESQL命令创建的表。当当前数据库连接关闭时,它们的内容将被删除,并且永远不会保存到数据库文件中。
    • 在sqlite3命令模式下运行ATTACH"some_file.db" AS my_db;就可以了!
    • 我会加1,只是现在正好有512个点……


    您似乎需要通过sqlite_主表,如下所示:

    1
    SELECT * FROM dbname.sqlite_master WHERE TYPE='table';

    然后用一个SELECT或类似的方法手工遍历每个表,以查看行。

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

    相关讨论

    • 不容易阅读或记忆,将来使用;内置的.tables命令更直观。
    • @尽管这在任何SQL-API中都是可用的,因为它是valide SQL。内置命令可能不受任何地方的支持。
    • @Doktorj是否修改了.tables以显示附加数据库中的表?
    • 如果我通过sqlite3 ./mydatabase.db启动sqlite,然后键入.tables,我会得到数据库中的表列表…所以是的。类似地,.schema mytable在create table语句中向我显示表模式,SELECT * FROM mytable向我显示"mytable"中的所有数据。
    • 在那个数据库中,是的,但这个问题是关于显示您附加的数据库中的表。是否修改了.tables命令以显示这些内容?
    • 呸!阅读理解失败…我设法没有抓住附件中的引用…两次> <
    • 你刚刚从type列的sqlite_master表中读到,table列在哪里?我建议您在回答中简单地加上这一点,以使每个人更好地了解数据库及其主表的结构。


    要显示所有表,请使用

    1
    SELECT name FROM sqlite_master WHERE TYPE ="table"

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

    相关讨论

    • 谢谢你唯一一个真正解决这个问题的答案……"什么SQL",不能使用什么命令…谢谢!
    • 此外,这会每行打印一个表名,而.tables会打印多列表名(烦人/不有用)。


    使用.help检查可用命令。

    1
    .table

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

    相关讨论

    • 很奇怪,一定是正确的,但我用的时候不起作用
    • 我应该在哪里使用?桌子????
    • 它对我也不起作用


    在sqlite命令行上有一个可用于此操作的命令:

    1
    .tables ?PATTERN?      List names OF TABLES matching a LIKE pattern

    它转换为以下SQL:

    1
    2
    3
    4
    5
    6
    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


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

    1
    2
    SELECT name FROM sqlite_master
    WHERE TYPE='table';

    试试PRAGMA table_info(table-name);。http://www.sqlite.org/pragma.html架构

    相关讨论

    • 这可能是最好的方法。
    • 只有当您知道表的名称时,这才有效。不能使用此项获取表名列表。


    我用这个查询得到它:

    1
    SELECT name FROM sqlite_master WHERE TYPE='table'

    在iOS中使用:

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

    根据文件,mysqls的SHOW TABLES;相当于:

    The".tables" command is similar to setting list mode then executing
    the following query:

    1
    2
    3
    4
    5
    6
    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 answer。


    从最新版本的sqlite 3开始,您可以发布:

    1
    .fullschema

    查看所有的create语句。

    相关讨论

    • sqlite版本3.7.13 2012-07-17 17 17:46:21输入".help"有关说明,请输入以";sqlite>结尾的SQL语句。fullschema错误:未知命令或无效参数:"fullschema"。输入".help"获取帮助
    • 您使用的是2012年的版本


    最简单的方法是直接打开数据库并使用.DUMP命令,而不是在调用sqlite 3 shell工具后附加它。

    所以…(假设您的操作系统命令行提示是$)而不是$sqlite3:

    1
    sqlite3> ATTACH DATABASE.sqlite AS"attached"

    从操作系统命令行中,直接打开数据库:

    1
    2
    $sqlite3 DATABASE.sqlite
    sqlite3> .dump

    用途:

    1
    2
    3
    import sqlite3

    TABLE_LIST_QUERY ="SELECT * FROM sqlite_master where type='table'"

    通过union all将所有表合并到一个列表中。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT name
    FROM sqlite_master
    WHERE TYPE='table'

    UNION ALL

    SELECT name
    FROM sqlite_temp_master
    WHERE TYPE='table'

    由于没有人提到过sqlite的官方引用,我认为在这个标题下引用它可能很有用:

    网址:https://www.sqlite.org/cli.html

    可以使用此链接中描述的命令操作数据库。此外,如果您使用的是Windows操作系统,并且不知道命令shell在哪里,则在sqlite的站点中:

    网址:https://www.sqlite.org/download.html

    下载后,单击sqlite3.exe文件初始化sqlite命令shell。初始化时,默认情况下,此sqlite会话使用的是内存中的数据库,而不是磁盘上的文件,因此当会话退出时,所有更改都将丢失。要使用永久磁盘文件作为数据库,请在终端窗口启动后立即输入".open ex1.db"命令。

    上面的示例导致打开和使用名为"ex1.db"的数据库文件,如果该文件以前不存在,则创建该文件。您可能需要使用完整的路径名来确保文件位于您认为它所在的目录中。使用正斜杠作为目录分隔符。换句话说,使用"c:/work/ex1.db",而不是"c:workex1.db"。

    若要查看以前选择的数据库中的所有表,请键入命令.tables,如上面链接中所述。

    如果您在Windows中工作,我认为将这个sqlite.exe文件移动到与其他python文件相同的文件夹中可能会很有用。这样,python文件写入和sqlite shell读取.db文件的路径相同。


    .schema命令将列出可用的表及其行,方法是显示用于创建所述表的语句:

    1
    2
    3
    sqlite> CREATE table_a (id INT, a INT, b INT);
    sqlite> .schema table_a
    CREATE TABLE table_a (id INT, a INT, b INT);


    .da查看所有数据库-一个称为"main"

    可以通过以下方式查看此数据库的表:

    按1从sqlite_主订单中选择不同的tbl_名称;

    附加的数据库需要您在语句attach中选择的前缀,例如aa(,bb,cc…),因此:

    按1从aa.sqlite_主订单中选择不同的tbl_名称;

    请注意,这里也有视图。排除这些添加其中type='table'在"订单"之前


    • 关于java:如何在数据库中获取表信息(SQLite)
    • 如何从数据库中检索所有表?
    • 如何从sqlite DB列出表名 - Android
    • 关于python:列出数据库的表
    • 使用Python sqlite3 API的表,db模式,转储等的列表
    • 关于iphone:如何以编程方式获取sqlite中所有表的列表
    • 关于python:table polls_choice没有名为poll_id的列
    • 关于SQL:数据库索引如何工作?
    • 关于mysql:如何选择SQL数据库表中的第n行?
    • 关于sql server:在一个SQL查询中插入多行?
    • 如何列出引用SQL Server中给定表的所有外键?
    • 关于sql:是否可以在SQLite数据库中一次插入多行?
    • 关于C#:提高sqlite的每秒插入性能?
    • 关于数据库:Android上SQLite的最佳实践是什么?
    • 关于sql:在关系数据库中存储分层数据的选项有哪些?
    • 如何使用MySQL中的命令行导入SQL文件?
    • 删除SQL Server中的记录后重置标识种子

    Copyright ©  码农家园 联系:[email protected]