【发布时间】:2011-03-20 19:33:46
【问题描述】:
我刚刚开始学习SQLite。如果能够查看表的详细信息,例如 MySQL 的 DESCRIBE [table],那就太好了。 PRAGMA table_info [table] 不够好,因为它只有基本信息(例如,它不显示列是否是某种类型的字段)。 SQLite 有办法做到这一点吗?
【问题讨论】:
我刚刚开始学习SQLite。如果能够查看表的详细信息,例如 MySQL 的 DESCRIBE [table],那就太好了。 PRAGMA table_info [table] 不够好,因为它只有基本信息(例如,它不显示列是否是某种类型的字段)。 SQLite 有办法做到这一点吗?
【问题讨论】:
SQLite command line utility 有一个 .schema TABLENAME 命令显示创建语句。
【讨论】:
查看所有表格:
.tables
查看特定表格:
.schema [tablename]
【讨论】:
.schema TABLENAME
tablename是可选参数。
您是否正在寻找用于生成表的 SQL?为此,您可以query the sqlite_schema table:
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_schema或temp.sqlite_schema等架构名称限定的情况下。但为了历史兼容性,也可以识别一些替代名称,包括:
sqlite_mastersqlite_temp_schemasqlite_temp_master备选方案 (2) 和 (3) 仅适用于与每个数据库连接关联的 TEMP 数据库,但备选方案 (1) 适用于任何地方。
【讨论】:
.schema foo有区别吗?
.schema 只能从命令行使用;上述命令可以通过库(Python、C# 等)作为查询运行。
PRAGMA table_info([tablename]);
【讨论】:
.schema tablename 更相当于 MySQL 的描述。
PRAGMA table_info [table] 不够好,因为它只有基本信息(例如,它不显示列是否是某种字段与否)。”
为防止人们被某些 cmets 误导到其他答案:
.schema 或query from sqlite_master 没有给出任何输出,则表示不存在tablename,例如这也可能是由.schema、.tables 的末尾的; 分号引起的,或者只是因为该表确实不存在。
.schema 不起作用的可能性很小,然后应该在 sqlite 项目中提交错误报告。... .schema 只能在命令行中使用;上述命令 > 可以通过库(Python、C# 等)作为查询运行。 – Mark Rushakoff 2010 年 7 月 25 日 21:09
sqlite,比该语言为每个程序提供一个 wrapper/library 更有可能得到支持(这不仅容易导致不完整大量程序的本质,但也是反作用single-source principle,使maintenance复杂化,加剧了世界数据的混乱)。【讨论】: