核心概念与术语详解
SQL.js 与 WebAssembly
SQL.js 是 SQLite 数据库引擎的 JavaScript 实现,通过 Emscripten 编译器将 SQLite 的 C 代码编译为 WebAssembly(Wasm)格式。WebAssembly 是一种可以在浏览器中以接近原生速度执行的二进制格式,使得 SQLite 的完整功能集能够在浏览器环境中运行。SQL.js 保留了 SQLite 的所有特性,包括完整的 SQL 语法支持、事务处理、索引、视图、触发器等。数据存储在浏览器的内存中,支持通过 File API 导入和导出数据库文件。SQL.js 的性能对于中小型数据库(几百 MB 以内)完全够用,查询速度与原生 SQLite 相当。
SQLite
SQLite 是一个轻量级的、服务器端的、零配置的、事务性的 SQL 数据库引擎。与其他数据库系统不同,SQLite 不需要单独的服务器进程,整个数据库存储在一个普通的磁盘文件中。SQLite 支持标准的 SQL 语法,包括 ACID 事务、索引、视图、触发器、外键约束等。由于其简单性和嵌入性,SQLite 被广泛应用于移动应用、桌面软件、浏览器存储和嵌入式系统中。它是全球部署最广泛的数据库引擎,几乎所有智能手机和浏览器都内置了 SQLite。
DDL(数据定义语言)
DDL 用于定义和管理数据库的结构(Schema),主要命令包括:CREATE TABLE(创建表)、ALTER TABLE(修改表结构,如添加/删除列)、DROP TABLE(删除表)、CREATE INDEX(创建索引)、CREATE VIEW(创建视图)、CREATE TRIGGER(创建触发器)。DDL 语句通常会自动提交事务,执行后不可撤销(除非在事务中执行且未提交)。在本工具中,执行 DDL 语句后左侧的表列表会自动更新,反映最新的数据库结构。
DML(数据操作语言)
DML 用于操作数据库中的数据,主要命令包括:INSERT(插入新行)、UPDATE(更新现有行)、DELETE(删除行)、SELECT(查询数据)。SELECT 是最复杂的 DML 语句,支持丰富的子句:WHERE(条件筛选)、JOIN(多表联查)、GROUP BY(分组)、HAVING(分组后筛选)、ORDER BY(排序)、LIMIT/OFFSET(分页)、DISTINCT(去重)、聚合函数(SUM、AVG、COUNT、MAX、MIN)等。DML 语句可以包含在事务中,支持回滚操作。
JOIN(联接查询)
JOIN 用于根据两个或多个表之间的关联条件组合查询结果。主要类型包括:INNER JOIN(内联接,只返回两个表中都匹配的行)、LEFT JOIN(左外联接,返回左表所有行和右表匹配的行,不匹配的列为 NULL)、RIGHT JOIN(右外联接,返回右表所有行和左表匹配的行)、FULL OUTER JOIN(完全外联接,返回两个表的所有行)、CROSS JOIN(交叉联接,返回两个表的笛卡尔积)。JOIN 是关系型数据库的核心操作,几乎所有的复杂查询都需要使用 JOIN。
子查询(Subquery)
子查询是嵌套在另一个 SQL 语句中的查询。子查询可以出现在 WHERE 子句中用于条件筛选(如 WHERE id IN (SELECT user_id FROM orders WHERE amount > 100))、FROM 子句中作为临时表(派生表)、SELECT 子句中作为标量值。子查询分为相关子查询(引用外部查询的列)和非相关子查询(独立执行)。SQLite 对子查询的支持非常完善,包括 IN、EXISTS、ANY、ALL 等操作符。
公共表表达式(CTE)
公共表表达式(Common Table Expression,CTE)使用 WITH 关键字定义,提供了一种创建临时命名结果集的方式。CTE 在查询执行期间存在,可以被同一查询中的后续子句引用。CTE 的主要优势是提高了复杂查询的可读性和可维护性。例如:WITH dept_stats AS (SELECT department, AVG(salary) as avg_sal FROM employees GROUP BY department) SELECT * FROM dept_stats WHERE avg_sal > 5000;。CTE 还支持递归形式(WITH RECURSIVE),可以处理层级数据(如组织架构、树形结构)。
窗口函数(Window Function)
窗口函数是 SQLite 3.25.0 引入的高级功能,允许在不减少结果行数的情况下执行聚合计算。窗口函数使用 OVER 子句定义计算窗口(一组相关的行)。常用窗口函数包括:ROW_NUMBER()(行号)、RANK()(排名,有间隔)、DENSE_RANK()(排名,无间隔)、NTILE(n)(分桶)、LAG/LEAD(前/后行的值)、FIRST_VALUE/LAST_VALUE(窗口内第一/最后一个值)、SUM/AVG/COUNT OVER(窗口聚合)。窗口函数是复杂数据分析和报表生成的强大工具。
事务(Transaction)
事务是一组作为单个逻辑单元执行的 SQL 操作,遵循 ACID 原子性:要么全部成功,要么全部失败。SQLite 支持三种事务模式:DEFERRED(延迟锁定,默认)、IMMEDIATE(立即获取 RESERVED 锁)、EXCLUSIVE(立即获取 EXCLUSIVE 锁)。事务控制语句包括 BEGIN(开始事务)、COMMIT(提交事务)、ROLLBACK(回滚事务)。在本工具中,可以使用事务来确保多条 DML 操作的原子性,例如在批量插入数据时如果某条失败可以回滚所有更改。
UD5工具箱