介绍一下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,核心操作围绕表创建、数据增删改查展开。其特色在于动态类型系统(不严格限制列类型)和轻量级特性,适合快速上手。实际使用中,需注意事务优化和索引合理设计以提升性能。

相关推荐
kobe_OKOK_5 小时前
有一次django开发实录
数据库·django·sqlite
love530love5 小时前
2025 PyCharm IDE 社区版与专业版合并后,新手该如何安装?(附 Toolbox 图形化安装教程)
ide·人工智能·windows·python·架构·pycharm·github
重回19815 小时前
Python 操作 SQLite:Peewee ORM 与传统 sqlite3.connect 的全方位对比
数据库·oracle·sqlite
lph0095 小时前
Android compose Room Sqlite 应用 (注入式)
android·数据库·sqlite
大可门耳5 小时前
Qt读写SQLite示例
jvm·qt·sqlite
安当加密5 小时前
DBG数据库透明加密网关:SQLServer应用免改造的安全防护方案,不限制开发语言的加密网关
网络·数据库
承悦赋6 小时前
初识Redis:解锁高性能缓存的魔法钥匙
数据库·spring boot·redis·分布式·缓存·中间件
cdcdhj6 小时前
在window中创建第2个mongodb数据的方法
数据库·mongodb
疯狂大嘴6 小时前
MongoDB备份数据库
数据库·mongodb