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

SQLite 核心知识点讲解

目录

1. 什么是 SQLite?

2. SQLite 的主要特点

3. SQLite 数据类型(类型亲和力)

4. 核心 SQL 命令

4.1 DDL (数据定义语言)

CREATE TABLE (创建表)

DROP TABLE (删除表)

ALTER TABLE (修改表)

4.2 DML (数据操作语言) - CRUD

INSERT INTO (创建 - Create)

SELECT (读取 - Read)

聚合与分组 (Aggregation & Grouping)

UPDATE (更新 - Update)

DELETE FROM (删除 - Delete)

5. 约束 (Constraints)

6. 索引 (Indexes)

7. 视图 (Views)

CREATE VIEW (创建视图)

使用视图

DROP VIEW (删除视图)

8. 事务 (Transactions)


1. 什么是 SQLite?

SQLite 是一个 C 语言库,它实现了一个小型的、快速的、自包含的、高可靠性的、功能齐全的 SQL 数据库引擎

与许多其他 SQL 数据库(如 MySQL, PostgreSQL)不同,SQLite 不是一个客户端/服务器(Client/Server)架构的数据库。相反,它是一个嵌入式数据库。这意味着数据库引擎不是一个独立的进程,而是作为应用程序的一部分直接运行。

SQLite 数据库本身就是一个单一的磁盘文件(通常以 .sqlite, .sqlite3.db 结尾)。

2. SQLite 的主要特点

  1. 零配置 (Zero-Configuration):

    • 不需要安装、设置或管理一个单独的服务器进程。

    • 开箱即用。

  2. 便携性 (Portability):

    • 整个数据库存储在一个跨平台的文件中。

    • 你可以轻松地复制、移动或通过电子邮件发送数据库文件。

  3. 自包含 (Self-Contained):

    • 它不需要任何外部依赖。

  4. 事务性 (Transactional):

    • SQLite 中的所有事务都是完全符合 ACID 标准的(原子性、一致性、隔离性、持久性),确保数据安全可靠。

  5. 标准 SQL (Standard SQL):

    • SQLite 支持绝大多数 SQL92 标准,并添加了一些自己的扩展。

  6. 应用场景:

    • 移动应用: Android 和 iOS 都内置了 SQLite。

    • 桌面应用: 许多应用程序(如浏览器、Skype)用它来存储本地数据。

    • 嵌入式设备和物联网 (IoT): 非常适合资源有限的设备。

    • 小型网站: 适用于低到中等流量的网站。

    • 原型设计: 在开发早期快速搭建应用原型。

3. SQLite 数据类型(类型亲和力)

这是 SQLite 的一个独特之处。大多数数据库使用静态类型(Static Typing),而 SQLite 使用动态类型,更准确地说是类型亲和力 (Type Affinity)

这意味着你存储在列中的值的数据类型取决于值本身,而不是列的声明类型。不过,在 CREATE TABLE 时声明类型仍然很重要,因为它会“建议”SQLite 倾向于使用哪种类型。

SQLite 只有 5 种主要的存储类型(亲和力):

  1. TEXT: 文本字符串,使用 UTF-8 编码。

  2. NUMERIC: 包含所有数字类型。SQLite 会根据数字的大小自动存储为整数或浮点数。

  3. INTEGER: 整数。

  4. REAL: 浮点数(小数)。

  5. BLOB: (Binary Large Object) 二进制数据,用于存储任何原始数据(如图片、文件)。

常见声明类型对应的亲和力:

  • INT, INTEGER, TINYINT... -> INTEGER

  • CHAR, VARCHAR, TEXT... -> TEXT

  • DOUBLE, FLOAT, REAL... -> REAL

  • BOOLEAN -> 存储为 INTEGER (0 或 1)

  • DATE, DATETIME -> 存储为 TEXT (ISO 格式), REAL (Julian 天数), 或 INTEGER (Unix 时间戳)。推荐使用 TEXT

4. 核心 SQL 命令

4.1 DDL (数据定义语言)

CREATE TABLE (创建表)
CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT NOT NULL UNIQUE,email TEXT,age INTEGER
);
DROP TABLE (删除表)
DROP TABLE IF EXISTS users;
ALTER TABLE (修改表)

主要用于重命名表或添加新列。

-- 重命名表
ALTER TABLE users RENAME TO app_users;-- 添加新列
ALTER TABLE app_users ADD COLUMN created_at TEXT;

4.2 DML (数据操作语言) - CRUD

INSERT INTO (创建 - Create)

向表中插入新数据。

-- 插入所有列
INSERT INTO users (username, email, age) 
VALUES ('alice', 'alice@example.com', 30);-- 插入多行
INSERT INTO users (username, email, age) 
VALUES 
('bob', 'bob@example.com', 25),
('charlie', NULL, 42); -- email 可以为 NULL (如果没设置 NOT NULL)
SELECT (读取 - Read)

从表中查询数据。

-- 查询所有列
SELECT * FROM users;-- 查询特定列
SELECT username, email FROM users;-- 带条件的查询 (WHERE)
SELECT * FROM users WHERE age > 28;-- 排序 (ORDER BY)
SELECT * FROM users ORDER BY age DESC; -- DESC (降序), ASC (升序,默认)-- 限制数量 (LIMIT)
SELECT * FROM users LIMIT 10;
聚合与分组 (Aggregation & Grouping)

聚合函数对一组行进行计算,并返回一个单一的值。

  • COUNT(*): 计算总行数。

  • COUNT(column): 计算某列中非 NULL 值的数量。

  • SUM(column): 计算某列的总和(必须是数字)。

  • AVG(column): 计算某列的平均值(必须是数字)。

  • MAX(column): 找出某列的最大值。

  • MIN(column): 找出某列的最小值。

GROUP BY 语句通常与聚合函数一起使用,将结果集按一个或多个列进行分组。

-- 计算用户总数
SELECT COUNT(*) FROM users;-- 计算平均年龄
SELECT AVG(age) FROM users;-- 假设我们有一个 'department' (部门) 列
-- 统计每个部门有多少人
SELECT department, COUNT(*) 
FROM users 
GROUP BY department;-- 找出每个部门的最高年龄
SELECT department, MAX(age) 
FROM users 
GROUP BY department;
UPDATE (更新 - Update)

更新表中的现有数据。

警告: UPDATEDELETE 语句一定要带 WHERE 子句,否则它们将作用于表中的所有行

-- 更新特定用户的信息
UPDATE users
SET email = 'new_email@example.com'
WHERE username = 'alice';-- 更新多列
UPDATE users
SET age = age + 1, email = 'charlie@new.com'
WHERE username = 'charlie';
DELETE FROM (删除 - Delete)

从表中删除数据。

-- 删除特定用户
DELETE FROM users
WHERE username = 'bob';

5. 约束 (Constraints)

约束是在创建表时定义的规则,用于确保数据的完整性。

  • PRIMARY KEY (主键):

    • 唯一标识表中的每一行。

    • 自动包含 UNIQUENOT NULL 约束。

    • 使用 INTEGER PRIMARY KEY AUTOINCREMENT 可以创建一个自动递增的 ID。

  • NOT NULL (非空):

    • 确保该列的值不能为 NULL

    • username TEXT NOT NULL

  • UNIQUE (唯一):

    • 确保该列中的所有值都是唯一的。

    • username TEXT NOT NULL UNIQUE

  • DEFAULT (默认值):

    • 如果插入数据时未提供该列的值,则使用默认值。

    • status TEXT DEFAULT 'active'

  • CHECK (检查):

    • 确保值满足特定条件。

    • age INTEGER CHECK (age > 0)

  • FOREIGN KEY (外键):

  • 用于在两个表之间建立联系,确保引用完整性。

  • (在 SQLite 中,外键约束默认是关闭的,需要通过 PRAGMA foreign_keys = ON; 来开启)

6. 索引 (Indexes)

索引是一种数据结构,用于提高 SELECT 查询的速度。它就像一本书的目录。

  • 优点: 大大加快数据检索(SELECT)速度。

  • 缺点: 减慢数据写入(INSERT, UPDATE, DELETE)的速度,因为每次写入时也需要更新索引。

主键(PRIMARY KEY)和唯一约束(UNIQUE)会自动创建索引。

-- 为 users 表的 email 列创建一个索引
CREATE INDEX idx_user_email ON users (email);

7. 视图 (Views)

视图(View)是一个虚拟表,其内容由一个 SELECT 查询定义。

视图本身并不存储数据(它只是一个保存下来的查询)。当你查询视图时,数据库会实时执行这个 SELECT 查询并返回结果。

为什么使用视图?

  1. 简化复杂查询: 将一个复杂的多表连接(JOIN)查询保存为一个视图,之后你就可以像查询一个普通表一样查询它。

  2. 安全性: 可以只暴露表中的特定列或行给用户,隐藏敏感数据。

  3. 数据抽象: 即使底层表的结构改变了,只要视图的输出不变,依赖视图的应用程序就无需修改。

CREATE VIEW (创建视图)
-- 创建一个只显示 30 岁以上用户用户名和邮箱的视图
CREATE VIEW v_adult_users AS
SELECT username, email
FROM users
WHERE age > 30;
使用视图

创建后,你可以像查询普通表一样查询它:

-- 查询视图
SELECT * FROM v_adult_users;-- 视图也可以带 WHERE 子句
SELECT * FROM v_adult_users WHERE username = 'alice';
DROP VIEW (删除视图)
DROP VIEW IF EXISTS v_adult_users;

8. 事务 (Transactions)

事务是一个工作单元,它包含一个或多个 SQL 语句。事务是原子性的:要么所有语句都成功执行,要么全部不执行(回滚)。

这对于保持数据的一致性至关重要(例如:银行转账)。

-- 开始一个事务
BEGIN TRANSACTION;-- H假设从账户 1 向账户 2 转账 100 元
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;-- 检查是否有错误发生
-- ... (如果在应用程序代码中,这里会有逻辑检查) ...-- 如果一切正常,提交事务(永久保存更改)
COMMIT;-- 如果发生错误,回滚事务(撤销所有更改)
-- ROLLBACK;
http://www.dtcms.com/a/540346.html

相关文章:

  • JAiRouter v1.1.0 发布:把“API 调没调通”从 10 分钟压缩到 10 秒
  • 自建网站如何赚钱c2c模式为消费者提供了便利和实惠
  • Lua-编译,执行和错误
  • Lua与LuaJIT的安装与使用
  • 数独生成题目lua脚本
  • 影响网站加载速度wordpress获得当前文章的相关文章
  • Hive 技术深度解析与 P7 数据分析架构师多行业全场景实战课程合集(视频教程)
  • 嘉兴高端网站建设公司网络安全等级保护
  • HOW - localstorage 超时管理方案
  • java如何判断上传文件的类型,不要用后缀名判断
  • 【Linux】系统备份与恢复:rsync 与 tar 的完整使用教程
  • ROS2系列(3):第一个C++节点
  • zookeeper是什么
  • 构建“全链路解决方案”:解决集团化医院信创的三重难题
  • 网站建设区别广安市邻水建设局网站
  • 网站中的文字滑动怎么做化妆品网站建设策略
  • 【Netty4核心原理⑮】【Netty 编解码的艺术】
  • PHP-Casbin 在分布式服务中利用 Watcher 做策略同步
  • OCP考试必须培训吗?费用多少?
  • SpringBoot + 百度内容安全实战:自定义注解 + AOP 实现统一内容审核(支持文本 / 图片 / 视频 + 白名单 + 动态开关)
  • 心智结构与组织学习
  • NAS 私有云零信任部署:cpolar 加密访问 + 本地存储,破解安全与便捷难题
  • C++面向对象继承全面解析:不能被继承的类、多继承、菱形虚拟继承与设计模式实践
  • 只做财经的网站厦门高端网站建设公
  • 星宿网站建设系统开发过程中原型有哪些作用
  • Angular 入门项目
  • 架构解析:衡石科技如何基于AI+Data Agent重构智能数据分析平台
  • 云栖实录:重构可观测 - 打造大模型驱动的云监控 2.0 与 AIOps 新范式
  • AR技术如何确保数据准确无误?
  • Python-openai对话LLM