Is there an SQLite equivalent to MySQL's DESCRIBE [table]?
我刚刚开始学习SQLite。 能够查看表的详细信息会很高兴,比如MySQL的DESCRIBE [table]。 PRAGMA table_info [table]不够好,因为它只有基本信息(例如,它不显示列是否是某种类型的字段)。 SQLite有办法做到这一点吗?
SQLite命令行实用程序有一个.schema TABLENAME命令,显示create语句。
-
您可以在没有表格的情况下使用".schema",它会向您展示所有这些内容。
-
不要忘记在声明的最后省略分号
-
不需要分号
-
@Simon一个分号会导致命令无声地失败。
-
@djeikyb。这不应该被认为是一个错误吗?
-
可能他们修复了这个,因为至少在我的SQLite版本(3.8.10.2)中,我可以发出.schema和.schema users(例如),输出似乎是正确的 - 我不需要分号。
-
请注意,.schema是sqlite3 -shell和not valid SQL的命令。这意味着如果你想在应用程序中获取table-info,你必须使用@Strater的答案。
-
键入".help"有助于找到有用的命令,如".shema"
-
即使OP说,"PRAGMA table_info [表]不够好,因为它只有基本信息"?
1
| PRAGMA table_info([tablename]); |
-
这似乎更像是MySQL的描述,而不是.schema tablename。
-
是的。这对我有用。 .schema TABLENAME没有。但是,单独的.schema会显示所有的创建语句,但如果我只想查看一个表,那么PRAGMA的结果会更有用。
-
这看起来应该是接受的答案,因为它通过查询而不依赖于命令行界面。来自我的+1。
-
附录:我唯一注意到的是,当我使用INTEGER PRIMARY KEY创建一个表时,它不输出PRIMARY KEY,只是INTEGER。
-
@AkoiMeexx:从我原来的问题:"PRAGMA table_info [table]不够好,因为它只有基本信息(例如,它不显示列是否是某种类型的字段)。"
-
PRAGMA的完整列表:sqlite.org/pragma.html
-
它还以更像表的格式显示数据,而不是从.schema命令查看CREATE语句
您在寻找用于生成表的SQL吗?为此,您可以查询sqlite_master表:
-
这与.schema foo有什么区别吗?
-
@Matthew:.schema只能在命令行中使用;上述命令可以通过库(Python,C#等)作为查询运行。
-
@MarkRushakoff但结果是一样的吗?
-
调试WebSql时,+1"SELECT * FROM sqlite_master"在chrome dev工具中有效
要查看所有表格:
要查看特定表格:
为了防止人们被其他答案的一些评论误导:
如果.schema或query from sqlite_master没有给出任何输出,则表示不存在的tablename,例如这也可能是由.schema,.tables结尾的;分号引起的......或者只是因为该表确实不存在。
.schema不起作用是不太可能的,然后应该在sqlite项目中提交错误报告。
... .schema can only be used from a command line; the above commands > can be run as a query through a library (Python, C#, etc.). – Mark Rushakoff Jul 25 '10 at 21:09
'只能在命令行中使用'可能误导人。几乎任何(可能是每种?)编程语言都可以调用其他程序/命令。因此,引用的注释是不吉利的,因为调用另一个程序,在这种情况下是sqlite,比每个程序提供wrapper / library的语言更有可能得到支持(这不仅仅是由于大量程序的本质,但也是反作用single-source principle,使maintenance复杂化,进一步加剧了世界上的数据混乱。
-
编写程序以从任何SQL数据库检索数据的任何人都应使用其编程语言可用的适当SQL驱动程序来访问数据库并对其执行查询。这是访问数据库的适当方式。我永远不会建议破解旨在提供即席查询的命令行程序。你的建议是错误的。用于即席查询的命令行程序通常不是程序代码在数据库上运行查询的最合适的访问点。使用SQL驱动程序绝对不会"使维护变得复杂" - 这是最佳做法。
-
我同意它并不坏,它类似于图书馆。这就是为什么Linux | BSD发布包裹管理器的原因。为什么有0install跨平台PM。我的观点只是澄清并非所有程序都需要包装器。每次都没有意义。在这种情况下(DB处理)当然使用包装器并不是一个坏主意。
如果您使用的是图形工具。它会显示表名旁边的架构。对于DB Browser For Sqlite,单击打开数据库(右上角),导航并打开数据库,您将看到表中填充的信息,如下所示。
right click on the record/table_name, click on copy create statement and there you have it.
希望它帮助一些未能使用命令行的初学者。