介绍一下SQLite的基本语法和常用命令
文章目录
- 一、数据库连接与退出
- 1. 连接/创建数据库
- 2. 退出数据库
- 二、数据库基本信息查询
- 1. 查看所有表
- 2. 查看表结构
- 3. 查看数据库状态
- 三、表操作(DDL)
- 1. 创建表(CREATE TABLE)
- 2. 修改表(ALTER TABLE)
- 3. 删除表(DROP TABLE)
- 四、数据操作(DML)
- 1. 插入数据(INSERT)
- 2. 查询数据(SELECT)
- 3. 更新数据(UPDATE)
- 4. 删除数据(DELETE)
- 五、索引操作
- 1. 创建索引(加速查询)
- 2. 删除索引
- 六、事务操作
- 七、其他常用命令
- 总结
SQLite 作为轻量级嵌入式数据库,其语法遵循 SQL 标准,同时有一些自身特性。以下是 SQLite 的基本语法和常用命令:
一、数据库连接与退出
1. 连接/创建数据库
通过 sqlite3
命令行工具操作,若文件不存在则自动创建:
# 连接(或创建)名为 mydb.db 的数据库
sqlite3 mydb.db
2. 退出数据库
在 SQLite 命令行中输入:
.quit -- 或 .exit
二、数据库基本信息查询
1. 查看所有表
.tables -- 显示当前数据库中所有表名
2. 查看表结构
PRAGMA table_info(表名); -- 查看指定表的字段信息
.schema 表名 -- 查看表的创建语句(包含约束、索引等)
3. 查看数据库状态
PRAGMA database_list; -- 显示当前连接的数据库列表
PRAGMA journal_mode; -- 查看日志模式(默认 DELETE,建议改为 WAL)
三、表操作(DDL)
1. 创建表(CREATE TABLE)
CREATE TABLE IF NOT EXISTS 表名 (字段名1 类型 [约束],字段名2 类型 [约束],...[表级约束]
);
示例:创建 students
表
CREATE TABLE IF NOT EXISTS students (id INTEGER PRIMARY KEY AUTOINCREMENT, -- 自增主键name TEXT NOT NULL, -- 非空约束age INTEGER CHECK (age > 0), -- 检查约束(年龄必须>0)gender TEXT CHECK (gender IN ('男', '女')), -- 枚举约束email TEXT UNIQUE, -- 唯一约束create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- 默认当前时间
);
2. 修改表(ALTER TABLE)
SQLite 对表结构修改支持有限,主要包括:
-- 重命名表
ALTER TABLE 旧表名 RENAME TO 新表名;-- 添加新列
ALTER TABLE 表名 ADD COLUMN 新字段名 类型 [约束];
注:不支持删除列或修改现有列的类型/约束,需通过重建表实现。
3. 删除表(DROP TABLE)
DROP TABLE IF EXISTS 表名; -- 删除表(谨慎操作,数据会丢失)
四、数据操作(DML)
1. 插入数据(INSERT)
-- 插入指定字段
INSERT INTO 表名 (字段1, 字段2, ...)
VALUES (值1, 值2, ...);-- 插入所有字段(按表定义顺序)
INSERT INTO 表名
VALUES (值1, 值2, ...);-- 批量插入
INSERT INTO 表名 (字段1, 字段2)
VALUES
(值1, 值2),
(值3, 值4);
示例:
INSERT INTO students (name, age, gender)
VALUES ('张三', 20, '男'), ('李四', 22, '女');
2. 查询数据(SELECT)
SELECT 字段1, 字段2, ...
FROM 表名
[WHERE 条件]
[GROUP BY 字段]
[HAVING 分组条件]
[ORDER BY 字段 [ASC|DESC]] -- ASC升序(默认),DESC降序
[LIMIT 数量 OFFSET 偏移量]; -- 分页查询
示例:
-- 查询所有学生
SELECT * FROM students;-- 查询年龄>20的女生,按年龄降序
SELECT name, age FROM students
WHERE age > 20 AND gender = '女'
ORDER BY age DESC;-- 分页查询第2页(每页2条)
SELECT * FROM students LIMIT 2 OFFSET 2;
3. 更新数据(UPDATE)
UPDATE 表名
SET 字段1 = 值1, 字段2 = 值2, ...
WHERE 条件; -- 务必加条件,否则会更新所有行!
示例:
-- 将张三的年龄改为21
UPDATE students
SET age = 21
WHERE name = '张三';
4. 删除数据(DELETE)
DELETE FROM 表名
WHERE 条件; -- 务必加条件,否则会删除所有数据!
示例:
-- 删除年龄<18的学生
DELETE FROM students
WHERE age < 18;
五、索引操作
1. 创建索引(加速查询)
CREATE INDEX IF NOT EXISTS 索引名
ON 表名 (字段1, 字段2, ...); -- 可对多个字段创建联合索引
示例:对 students
表的 name
字段创建索引
CREATE INDEX idx_students_name ON students(name);
2. 删除索引
DROP INDEX IF EXISTS 索引名;
六、事务操作
SQLite 支持事务的 ACID 特性,通过事务批量处理可大幅提升性能:
BEGIN TRANSACTION; -- 开启事务-- 执行一系列操作(INSERT/UPDATE/DELETE)
INSERT INTO ...;
UPDATE ...;COMMIT; -- 提交事务(所有操作生效)
-- 或 ROLLBACK; -- 回滚事务(放弃所有操作)
七、其他常用命令
- 导出数据为 SQL 脚本
.output 文件名.sql -- 设置输出文件
.dump -- 导出所有表结构和数据
.output stdout -- 恢复输出到控制台
- 导入 SQL 脚本
# 在命令行中执行(未进入sqlite3时)
sqlite3 mydb.db < 文件名.sql
- 格式化查询结果
.headers on -- 显示列名
.mode column -- 按列对齐显示
.width 10 20 -- 手动设置列宽(数值为字符数)
总结
SQLite 语法简洁且兼容标准 SQL,核心操作围绕表创建、数据增删改查展开。其特色在于动态类型系统(不严格限制列类型)和轻量级特性,适合快速上手。实际使用中,需注意事务优化和索引合理设计以提升性能。