是否有一个等同于MySQL的DESCRIBE [table]的SQLite?

Mat*_*hew 425 mysql sqlite

我刚刚开始学习SQLite.能够看到像MySQL这样的表的详细信息会很高兴DESCRIBE [table].PRAGMA table_info [table]不够好,因为它只有基本信息(例如,它不显示列是否是某种类型的字段).SQLite有办法做到这一点吗?

Ned*_*der 548

SQLite的命令行实用程序有一个.schema TABLENAME显示你的创建语句命令.

  • 您可以在没有表格的情况下使用".schema",它会向您展示所有这些内容. (62认同)
  • 不要忘记在声明的最后省略分号 (43认同)
  • @Simon一个分号会导致命令静默*失败*. (38认同)
  • 不需要分号 (10认同)
  • @djeikyb.这不应该被认为是一个错误吗? (4认同)
  • 请注意,`.schema` 是用于 `sqlite3`-shell 和 **NOT** 有效 SQL 的命令。这意味着如果您想在应用程序中获取表信息,则必须使用 **@Strater** 的答案。 (3认同)

小智 280

PRAGMA table_info([tablename]);
Run Code Online (Sandbox Code Playgroud)

  • 对我来说,这似乎更像是MySQL的描述而不是`.schema tablename`. (19认同)
  • 这看起来应该是接受的答案,因为它通过查询而不依赖于命令行界面.来自我的+1. (15认同)
  • @AkoiMeexx:从我原来的问题:"`PRAGMA table_info [table]`不够好,因为它只有基本信息(例如,它不显示列是否是某种类型的字段). " (3认同)
  • 是的.这对我有用..schema TABLENAME没有.但是,单独的.schema会显示所有的创建语句,但如果我只想查看一个表,那么PRAGMA的结果会更有用. (2认同)

Mar*_*off 113

您在寻找用于生成表的SQL吗?为此,您可以查询sqlite_master:

sqlite> CREATE TABLE foo (bar INT, quux TEXT);
sqlite> SELECT * FROM sqlite_master;
table|foo|foo|2|CREATE TABLE foo (bar INT, quux TEXT)
sqlite> SELECT sql FROM sqlite_master WHERE name = 'foo';
CREATE TABLE foo (bar INT, quux TEXT)
Run Code Online (Sandbox Code Playgroud)

  • @Matthew:`.schema`只能在命令行中使用; 上述命令可以通过库(Python,C#等)作为查询运行. (15认同)
  • 调试WebSql时,+ 1“ SELECT * FROM sqlite_master”在chrome开发工具中有效 (2认同)

Ros*_*der 52

要查看所有表格:

.tables
Run Code Online (Sandbox Code Playgroud)

要查看特定表格:

.schema [tablename]
Run Code Online (Sandbox Code Playgroud)


Rad*_*ast 6

为了防止人们被其他答案的一些评论误导:

  1. 如果.schema还是query from sqlite_master没有提供任何输出,则表示不存在的tablename,比如,这也可以由引起;分号结束了.schema, .tables......或者仅仅因为表真的不存在.这.schema不起作用是不太可能的,然后应该在sqlite项目中提交错误报告.

... .schema只能在命令行中使用; 上面的命令>可以通过库(Python,C#等)作为查询运行. - Mark Rushakoff 2010年7月25日21:09

  1. '只能在命令行中使用'可能误导人.几乎任何(可能是每种?)编程语言都可以调用其他程序/命令.因此引用的评论是不吉利的,因为调用另一个程序,在这种情况下sqlite,比语言为每个程序提供一个wrapper/ 更有可能得到支持library(这不仅因为那里的大量程序的性质而容易出现不完整性,但也是反作用single-source principle,复杂化maintenance,进一步加剧了世界数据的混乱).

(作为答案,未作出评论但尚未发表评论.)

  • 任何编写从任何 SQL 数据库检索数据的程序的人都应该使用其编程语言可用的正确 SQL 驱动程序来访问数据库并对其执行查询。这是访问数据库的适当方法。我绝不会建议破解旨在提供临时查询的命令行程序。你的建议是严重错误的。用于即席查询的命令行程序当然不是程序代码在数据库上运行查询的最合适的访问点。使用 SQL 驱动程序当然不会“使维护复杂化”——这是最佳实践。 (2认同)

小智 5

“.schema”可以比“PRAGMA”显示更多表的详细信息,包括表约束

下面的命令显示所有表的详细信息

.schema
Run Code Online (Sandbox Code Playgroud)

下面的命令以格式良好的方式显示所有表的详细信息

.schema --indent
Run Code Online (Sandbox Code Playgroud)

下面的命令显示一张表的详细信息

.schema <table_name>
Run Code Online (Sandbox Code Playgroud)

下面的这些命令以格式良好的方式显示一个表的详细信息:

.schema --indent <table_name>
Run Code Online (Sandbox Code Playgroud)

或者:

.schema <table_name> --indent
Run Code Online (Sandbox Code Playgroud)

此外,下面的这些命令显示了有关“.schema”的详细信息

.help .schema
Run Code Online (Sandbox Code Playgroud)

或者:

.help schema
Run Code Online (Sandbox Code Playgroud)

然后,如下所示:

sqlite> .help .schema 
.schema ?PATTERN?        Show the CREATE statements matching PATTERN
   Options:
      --indent             Try to pretty-print the schema
      --nosys              Omit objects whose names start with "sqlite_"
Run Code Online (Sandbox Code Playgroud)