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