当前位置: 首页 > news >正文

介绍一下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;  -- 回滚事务(放弃所有操作)

七、其他常用命令

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

总结

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

http://www.dtcms.com/a/395661.html

相关文章:

  • 台式电脑如何恢复出厂设置?Win10 强制重置详细教程
  • 李宏毅2023机器学习作业 HW02实操
  • 【C++实战㉜】深入C++动态内存分配:从理论到实战的进阶之路
  • 小鼠抗新冠病毒N蛋白IgG亚型抗体ELISA检测试剂盒
  • 安防监控中常见的报警类型有哪些?国标GB28181平台EasyGBS的报警能力解析
  • C++ 中 size_t 的用(用于跨平台编译)
  • C++ 拷贝构造函数调用时机
  • 手机镜头参数介绍
  • 区块链技术之《(1)—概述》
  • 复盘与导出工具最新版V31.0版本更新---彻底修复卡死闪退bug,盘中实时丝滑
  • 深入理解JVM类加载与垃圾回收机制
  • Ethernet/IP转ProfiNet网关选型指南:欧姆龙PLC对接研祥工控机最佳实践
  • Java 面试高频手撕题清单
  • 【论文阅读】Long-VLA:释放视觉语言动作模型在机器人操作中的长时程能力
  • Python poplib 库全解析:POP3 邮件收取的完整指南
  • DanceTrack数据集介绍
  • 【无标题】话题学习笔记1,话题基本了解
  • 【论文阅读】OpenVLA:一个开源的视觉-语言-动作模型
  • 科技信息差(9.22)
  • Zotero中进行文献翻译【Windows11】【新版,目前没发现bug】
  • 单细胞数据分析:单细胞计数矩阵(Seurat)
  • Hyperf使用视图
  • React何时用函数组件(Hooks),何时用类组件?(错误边界用类组件Error Boundary)
  • VMware虚拟机ubuntu20.04共享文件夹突然无法使用
  • 流行AI工具的分类与比较
  • 哪些行业需要使用时序数据库?
  • PyTorch 神经网络工具箱简明笔记
  • Pytorch目录细查
  • VMware的Ubuntu与windows共享文件夹
  • RK3588-ubuntu server