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


440

我刚刚开始学习SQLite。能够看到表格的详细信息(如MySQL的表格)会很高兴DESCRIBE [table]PRAGMA table_info [table]不够好,因为它仅具有基本信息(例如,它不会显示列是否是某种字段)。SQLite有办法吗?

Answers:



292
PRAGMA table_info([tablename]);

19
这似乎比.schema tablename我的描述更等同于MySQL的描述。
tybro0103 2012年

2
是的 这对我有用。.schema TABLENAME没有。但是,仅.schema确实会向您显示所有create语句,但是如果我只想查看一个表,则PRAGMA的结果会有用得多。
Dev Kanchen 2012年

15
这似乎应该被接受,因为它通过查询而不是依赖命令行界面来工作。向我+1。
Akoi Meexx

附录:我唯一要注意的是,当我使用INTEGER PRIMARY KEY(仅INTEGER)创建表时,它不会输出PRIMARY KEY。
Akoi Meexx

3
@AkoiMeexx:从我最初的问题开始:“ PRAGMA table_info [table]还不够好,因为它仅具有基本信息(例如,它不会显示列是否是某种字段)。”
马修

115

您是否正在寻找用于生成表的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)

和之间有什么区别.schema foo吗?
马修2010年

15
@Matthew:.schema只能在命令行中使用;上面的命令可以通过库(Python,C#等)作为查询运行。
Mark Rushakoff

@MarkRushakoff但是结果是一样的吗?
dvb 2012年

2
+1 “SELECT * FROM SQLITE_MASTER”在Chrome浏览器开发工具配合使用时,调试的WebSQL
contactmatt


6

为了防止人们对其他答案的某些评论造成误导:

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

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

  1. “只能从命令行使用”可能会误导人们。几乎所有(可能是每一种?)编程语言都可以调用其他程序/命令。因此,引用的注释很不幸,因为在这种情况下sqlite,调用另一个程序比该语言为每个程序都提供一个wrapper/ 更有可能得到支持library(由于那里大量程序的本质,这样做不仅容易造成不完整) ,而且还起到反作用single-source principle,使maintenance世界上的数据混乱更加复杂)。

1
任何编写程序以从任何SQL数据库检索数据的人都应使用其编程语言可用的适当SQL驱动程序来访问数据库并对其执行查询。那是访问数据库的适当方法。我绝不建议破解旨在提供即席查询的命令行程序。您的建议是错误的。特定情况下,用于临时查询的命令行程序并不是在数据库上运行查询的程序代码的最合适的访问点。使用SQL驱动程序肯定不是在“复杂化维护”,这是最佳实践。
Medlock Perlman

我同意这还不错,它类似于库。这就是Linux | BSD发行软件包管理器的原因。以及为什么有0install跨平台PM。我的意思只是要说明并非所有程序都需要包装。每次都没有意义。在这种情况下(数据库处理),使用包装器当然不是一个坏主意。
Radagast

1

如果 您使用的是图形工具。它在表名旁边显示了架构。如果使用 DB Browser for Sqlite,则单击以打开数据库(右上角),导航并打开数据库,您将在下表中看到填充的信息。

在此处输入图片说明

右键单击record / table_name,单击copy create语句,然后就可以了。

希望它对一些未能使用命令行的初学者有所帮助。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.