SQLite描述表格

在使用 MySQL 这样的常规SQL数据库时,我们通常会使用 describe <table_name> 来检查一个表的结构,那么在SQLite中有没有相同或类似的命令呢?

.schema

SQLite提供了一个 .schema 命令来获取表格创建的命令,这样就能对应知道表的结构信息:

通过 .schema 命令获取表格信息
.schema tweets

备注

这里执行 .schema <table_name> 时不要在命令结尾添加 ; ,否则会导致没有输出信息

案例以 Rails快速起步 中表 tweets 为例,输出信息如下:

通过 .schema 命令获取表格 tweets 可以看到该表创建命令
CREATE TABLE IF NOT EXISTS "tweets" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "body" text, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL);

通过 .schema 输出的创建表命令,实际上和我们常见的 describe <tables_name> 有些不同,那么怎么更为直观简单地显示表结构呢?

SQLite还提供了一个 pragma 命令来显示表结构

pragma

通过以下命令使用 pragma 命令可以显示 tweets 表结构:

通过 pragma 命令展示表结构
.header on
.mode column
pragma table_info('tweets');

查询 sqlite_schema

备注

注意, sqlite_schema 表是 SQLite 3.33.0 引入的,在这个版本之前不存在。旧版本的表名是 sqlite_master !!!

也就是说,如果你使用的SQLite版本早于 3.33.0 ,则查询 sqlite_master 表。我的实践在 SQLite 3.32.3 上完成(因为我的macOS是古早的11.7.10 Big Sur,所以通过 Homebrew 安装只有 SQLite 3.32.3),此时就必须查询 sqlite_master ,否则会报错:

Error: no such table: sqlite_schema

和上述 .schema 方法类似,可以直接查询 sqlite_schema 表来获得指定表名的创建SQL命令:

通过查询 sqlite_schema 可以获得指定表名的创建命令
# SQLite版本3.33.0之前查询 sqlite_master 表
select sql from sqlite_master where name = 'tweets';

# SQLite版本3.33.0之后查询 sqlite_schema 表
select sql from sqlite_schema where name = 'tweets';

输出表的创建SQL:

通过查询 sqlite_schema 获得指定表名的创建命令输出举例
sql                                                                                                                                                                        
-------------------------------------------------------------------------------------------------------------------- 
CREATE TABLE "tweets" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "title" varchar, "body" text, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL)

参考