命令行
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)
| 字段 | 值 | 含义 |
|---|---|---|
| type | table | 对象类型 |
| name | admin | 对象名称 |
| tbl_name | admin | 所属表名称 |
| rootpage | 2 | B树根页号 |
| sql | CREATE TABLE admin(…) | 创建语句 |