是否存在与MySQL's DESCRIBE [table]相对应的SQLite ?

我刚刚开始学习SQLite。如果能够看到表的详细信息就更好了,比如MySQL的DESCRIBE [table]PRAGMA table_info [table]不够好,因为它只有基本信息(例如,它没有显示一个列是否是某种类型的字段)。SQLite有办法做到这一点吗?

243755 次浏览

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

查看所有表格:

.tables

要查看一个特定的表:

.schema [tablename]

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

sqlite> CREATE TABLE foo (bar INT, quux TEXT);
sqlite> SELECT * FROM sqlite_schema;
table|foo|foo|2|CREATE TABLE foo (bar INT, quux TEXT)
sqlite> SELECT sql FROM sqlite_schema WHERE name = 'foo';
CREATE TABLE foo (bar INT, quux TEXT)
Alternative Names .

模式表总是可以使用名称sqlite_schema来引用,特别是当模式名限定为main.sqlite_schematemp.sqlite_schema时。但为了历史兼容,一些替代名称也被认可,包括:

  1. sqlite_master
  2. sqlite_temp_schema
  3. sqlite_temp_master

替代方案(2)和(3)仅适用于与每个数据库连接关联的TEMP数据库,但替代方案(1)适用于任何地方。

PRAGMA table_info([tablename]);

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

  1. 如果.schemaquery from sqlite_master没有给出任何输出,则表示不存在tablename,例如,这也可能是由于.schema.tables,…或者只是因为这个表根本不存在。 .schema不工作是不太可能的,然后应该在sqlite项目中提交错误报告

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

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

如果< em > < / em >你正在使用图形工具。它在表名旁边显示模式。在DB Browser For Sqlite . DB Browser For Sqlite的情况下,单击打开数据库(右上角),导航并打开你的数据库,你会看到下面表格中填充的信息。

enter image description here

右键单击记录/table_name,单击复制创建语句,你就有了它。

希望它能帮助到一些无法使用命令行的初学者。

“.schema"可以显示表的更多细节,包括表约束而不是“PRAGMA"

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

.schema

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

.schema --indent

下面的命令显示了一张表的细节:

.schema <table_name>

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

.schema --indent <table_name>

或者:

.schema <table_name> --indent

此外,下面这些命令显示关于“。schema":

.help .schema

或者:

.help schema

然后,它是这样的:

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_"