命令行

SQLite CLI 的点命令以 . 开始,单独占一行,不需要分号;SQL 语句通常以 ; 结束。点命令也不能追加 SQL 风格的行尾注释。

SQLite 中「新建数据库」和「打开数据库」是同一个命令(文件不存在则创建,存在则打开):

# 方式1:创建/打开名为 test.db 的数据库(文件会生成在当前目录)
sqlite3 test.db

# 方式2:打开后查看当前数据库文件路径(验证)
sqlite> .databases

核心点命令

命令作用
.databases查看当前连接的数据库文件
.tables查看当前数据库中有哪些表
.schema查看表的创建语句
.headers on查询结果显示列名(默认 off)
.mode column结果按列对齐显示(还有 box / csv / json / list)
.dump把整个库导出成 SQL 文本(备份/迁移用)
.read init.sql执行一个 .sql 脚本文件里的所有语句
.quit / .exit退出

推荐每次进去先设置好显示格式:

sqlite> .headers on
sqlite> .mode column

SQL语句

表操作

创建表

CREATE TABLE [IF NOT EXISTS] 表名 (
  列名1 数据类型 [约束],
  列名2 数据类型 [约束],
  ...
);
-- 创建用户表(IF NOT EXISTS 避免重复创建报错)
CREATE TABLE IF NOT EXISTS user (
  id INTEGER PRIMARY KEY AUTOINCREMENT,  -- 主键,自增
  name TEXT NOT NULL,                    -- 姓名,非空
  age INTEGER DEFAULT 0,                 -- 年龄,默认0
  phone TEXT UNIQUE,                     -- 手机号,唯一
  create_time DATETIME DEFAULT CURRENT_TIMESTAMP  -- 创建时间,默认当前时间
);

数据类型

  • INTEGER:整数(int);
  • TEXT:字符串(varchar);
  • REAL:浮点数(double);
  • SQLite 没有独立的 DATETIME 存储类别;日期时间可用 TEXT、REAL 或 INTEGER 保存。示例中的 DATETIME 是列声明类型,CURRENT_TIMESTAMP 默认产生 UTC 日期时间文本;
  • BLOB:二进制数据(如图片)。

常用约束

  • PRIMARY KEY:主键(唯一标识行);
  • AUTOINCREMENT:仅用于 INTEGER PRIMARY KEY,自动生成编号时避免复用历史上已提交过的 ROWID;一般自动生成编号只需 INTEGER PRIMARY KEY,编号不保证连续;
  • NOT NULL:非空;
  • UNIQUE:唯一;
  • DEFAULT:默认值

修改表

-- 给user表添加 email 列
ALTER TABLE user ADD COLUMN email TEXT;

-- 重命名表
ALTER TABLE user RENAME TO user_info;

删除表

-- 删除user表(谨慎!数据会全部丢失)
DROP TABLE IF EXISTS user;

数据操作

以下示例以“创建表”中的初始 user 表为前提,各节示例独立演示;如果已经重命名、删除或添加列,应相应调整表名和列清单。

插入数据

-- 方式1:指定列插入
INSERT INTO user (name, age, phone) VALUES ('张三', 25, '13800138000');

-- 方式2:插入所有列(按创建表时的五列顺序;用 NULL 占据 id 的位置以自动生成编号)
INSERT INTO user VALUES (NULL, '李四', 30, '13900139000', CURRENT_TIMESTAMP);

-- 批量插入
INSERT INTO user (name, age, phone) 
VALUES 
  ('王五', 28, '13700137000'),
  ('赵六', 32, '13600136000');

查询数据

SELECT 列名1, 列名2 FROM 表名 [WHERE 条件] [ORDER BY 列名] [LIMIT 数量];

系统表

每一个 SQLite 数据库都有一个对应的 SQLITE_MASTER 表, 它定义了数据库的模式。你不能对它使用UPDATE、INSERT 或 DELETE。

CREATE TABLE sqlite_master(
    type text,
    name text,
    tbl_name text,
    rootpage integer,
    sql text
);
sqlite> create table admin(username text,age integer);
sqlite> insert into admin values('ppp',20);
sqlite> .schema
CREATE TABLE admin(username text,age integer);
sqlite> .tables
admin
sqlite> SELECT * FROM sqlite_master;
table|admin|admin|2|CREATE TABLE admin(username text,age integer)
字段值含义
typetable对象类型
nameadmin对象名称
tbl_nameadmin所属表名称
rootpage2B树根页号
sqlCREATE TABLE admin(…)创建语句

参考:SQLite CLI;SQLite 数据类型;AUTOINCREMENT。