介绍一下SQLite的基本语法和常用命令

文章目录

    • 一、数据库连接与退出
      • [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;  -- 回滚事务(放弃所有操作)

七、其他常用命令

  1. 导出数据为 SQL 脚本
sql 复制代码
.output 文件名.sql  -- 设置输出文件
.dump  -- 导出所有表结构和数据
.output stdout     -- 恢复输出到控制台
  1. 导入 SQL 脚本
bash 复制代码
# 在命令行中执行(未进入sqlite3时)
sqlite3 mydb.db < 文件名.sql
  1. 格式化查询结果
sql 复制代码
.headers on  -- 显示列名
.mode column  -- 按列对齐显示
.width 10 20  -- 手动设置列宽(数值为字符数)

总结

SQLite 语法简洁且兼容标准 SQL,核心操作围绕表创建、数据增删改查展开。其特色在于动态类型系统(不严格限制列类型)和轻量级特性,适合快速上手。实际使用中,需注意事务优化和索引合理设计以提升性能。

相关推荐
ClouGence19 分钟前
轻量安全、开箱即用:0 成本开启数据实时同步
数据库·saas
junnhwan19 分钟前
【苍穹外卖笔记】Day05--Redis入门与店铺营业状态设置
java·数据库·redis·笔记·后端·苍穹外卖
hzk的学习笔记29 分钟前
Redis除了做缓存还能用来干什么
数据库·redis·缓存
Xxtaoaooo1 小时前
原生多模态AI架构:统一训练与跨模态推理的系统实现与性能优化
人工智能·架构·分布式训练·多模态·模型优化
洛卡卡了1 小时前
从被动救火到主动预警,接入 Prometheus + Grafana 全流程
后端·面试·架构
失散131 小时前
分布式专题——44 ElasticSearch安装
java·分布式·elasticsearch·架构
krielwus1 小时前
Oracle OMF 配置文档
数据库·oracle
怿星科技2 小时前
Android MVVM架构解析:现代开发的首选模式
android·架构
文火冰糖的硅基工坊2 小时前
[嵌入式系统-100]:IoT(物联网)与AIoT(人工智能物联网)
人工智能·物联网·架构·创业
江湖人称小鱼哥2 小时前
Prisma 命令安全指南
数据库·安全·prisma