非常教程

Sqlite参考手册

其他 | Miscellaneous

The SQLite Amalgamation

将超过100个单独的源文件连接到名为 “sqlite3.c” 的 C 代码的单个大文件中,并称为“合并”。合并包含应用程序需要嵌入 SQLite 的所有内容。合并文件长度超过180,000行,大小超过6兆字节。

将 SQLite 的所有代码组合成一个大文件使得 SQLite 更容易部署 - 只需要一个文件来跟踪。由于所有代码都位于单个翻译单元中,因此编译器可以执行更好的程序间优化,从而使机器代码的速度提高5%至10%。

SQLite 库由核心中的102个 C 代码文件(截至版本3.9.0 - 2015-10-14)组成,其中32个附加文件实现 FTS3,FTS5,RTREE,DBSTAT,JSON1 和 RBU 扩展。在102个主要源文件中,大约75%是 C 代码,大约25%是 C 头文件。其中大部分是“源”文件,因为它们存储在 SQLite版本控制系统中,并且可以在普通文本编辑器中手动编辑。但是一些 C 语言文件是使用脚本或辅助程序生成的。例如,parse.y 文件包含一个 LALR(1)语法的 SQL 语言,该语法被编译成由 Lemon 解析器生成器生成的文件 “parse.c” 和 “parse.h” 中的解析器。

SQLite 的 makefile 有一个 “sqlite3.c” 目标,用于构建我们称之为“合并”的文件。合并是一个名为 “sqlite3.c” 的 C 代码文件,其中包含核心 SQLite 库以及 FTS3,FTS5,RTREE,DBSTAT,JSON1 和 RBU 扩展的所有C代码。该文件包含大约184K行代码(如果省略空行和注释,则为113K),并且大小超过6.4 MB。尽管各种扩展名都包含在 “sqlite3.c” 合并文件中,但它们使用 #ifdef 语句禁用。使用编译时选项来激活扩展,如:

  • -DSQLITE_ENABLE_FTS3
  • -DSQLITE_ENABLE_FTS5
  • -DSQLITE_ENABLE_RTREE
  • -DSQLITE_ENABLE_DBSTAT_VTAB
  • -DSQLITE_ENABLE_JSON1
  • -DSQLITE_ENABLE_RBU

合并包含将 SQLite 集成到更大项目中所需的一切。只需将合并代码复制到您的源代码目录中,并将其与您项目中的其他 C 代码文件一起编译。(有关编译过程的更详细讨论可用。)您可能还想使用定义 SQLite 编程 API 的 “sqlite3.h” 头文件。sqlite3.h 头文件单独提供。sqlite3.h 文件也包含在合并中,前几千行中。所以,如果你有一个 sqlite3.c 的副本,但似乎无法找到 sqlite3.h,你总是可以通过从合并中复制和粘贴来重新生成 sqlite3.h。

除了让 SQLite 更易于融入其他项目之外,合并还可以让它运行得更快。许多编译器可以在代码被包含在单个翻译单元中时进行额外的优化,例如在合并中。当我们使用合并来编译 SQLite 而不是单独的源文件时,我们已经测量了5%到10%之间的性能改进。这样做的缺点是额外的优化通常采用函数内联的形式,这往往会使得到的二进制图像的大小变大。

开发人员有时在调试185,000行长的合并源文件时遇到问题,因为有些调试器只能处理小于32,768的源代码行号。合并源代码运行良好。在调试器中不能单步执行。

为了避免这种限制,合并还可以以分割形式获得,包括文件 “sqlite3-1.c”,“sqlite3-2.c” 等等,其中每个文件的长度小于32,768行,并且其中这些文件的连接包含完整合并的所有代码。然后有一个名为 “sqlite3-all.c” 的单独源文件,它基本上由以下代码组成:

#include "sqlite3-1.c"
#include "sqlite3-2.c"
#include "sqlite3-3.c"
#include "sqlite3-4.c"
#include "sqlite3-5.c"
#include "sqlite3-6.c"
#include "sqlite3-7.c"

使用拆分合并的应用程序只需针对 “sqlite3-all.c” 而不是 “sqlite3.c” 进行编译。这两个文件完全一样。但是对于 “sqlite3-all.c”,没有单个源文件包含超过32,767行代码,因此使用一些调试器会更方便。拆分合并的缺点是它由6个 C 源代码文件组成,而不仅仅是1个。

合并和 sqlite3.h 头文件在下载页面上可用,名为 sqlite-amalgamation-X.zip,其中 X 由适当的版本号替换。

要构建合并(无论是完全合并还是拆分合并),请首先从三台服务器中的一台获取规范源代码。然后,在类 Unix 系统和安装有免费 MinGW 开发环境的 Windows 系统上,可以使用以下命令构建合并:

sh configure
make sqlite3.c

要使用 Microsoft Visual C ++ 构建,请运行以下命令:

nmake /f makefile.msc sqlite3.c

在这两种情况下,通过将 “sqlite3-all.c” 替换为 “sqlite3.c” 作为 make 目标,可以获得拆分合并。

5.1 依赖

构建过程大量使用 Tcl 脚本语言。您需要安装 TCL 副本才能使上述 make 目标正常工作。易于使用的安装程序可以从http://www.tcl-lang.org/ 获得。许多 Unix 工作站默认安装了 Tcl。

其他 | Miscellaneous相关

1.35% Faster Than The Filesystem
2.8+3 Filenames
3.An Asynchronous I/O Module For SQLite
4.Appropriate Uses For SQLite
5.Architecture of SQLite
6.Atomic Commit In SQLite
7.Automatic Undo/Redo With SQLite
8.Benefits of SQLite As A File Format
9.Change in Default Page Size in SQLite Version 3.12.0
10.Clustered Indexes and the WITHOUT ROWID Optimization
11.Compile-time Options
12.Constraint Conflict Resolution in SQLite
13.Custom Builds Of SQLite
14.Deterministic SQL Functions
15.Distinctive Features Of SQLite
16.EXPLAIN QUERY PLAN
17.Features Of SQLite
18.File Format Changes in SQLite
19.Full-Featured SQL
20.High Reliability
21.Hints for Debugging SQLite
22.How SQLite Is Tested
23.How To Compile SQLite
24.How To Download Canonical SQLite Source Code
25.Imposter Tables
26.In-Memory Databases
27.Indexes On Expressions
28.Internal Versus External BLOBs
29.Isolation In SQLite
30.Long Term Support
31.Maintaining Private Branches Of SQLite
32.Many Small Queries Are Efficient In SQLite
33.Measuring and Reducing CPU Usage in SQLite
34.Memory-Mapped I/O
35.NULL Handling in SQLite
36.Partial Indexes
37.Pointer Passing Interfaces
38.Powersafe Overwrite
39.Release History Of SQLite
40.Result and Error Codes
41.Row Values
42.Rowid Tables
43.Run-Time Loadable Extensions
44.SQL Features That SQLite Does Not Implement
45.sqldiff.exe: Database Difference Utility
46.SQLite As An Application File Format
47.SQLite Autoincrement
48.SQLite Backup API
49.SQLite Changes From Version 3.4.2 To 3.5.0
50.SQLite Changes From Version 3.5.9 To 3.6.0
51.SQLite Database Speed Comparison
52.SQLite File IO Specification
53.SQLite Frequently Asked Questions
54.SQLite In 5 Minutes Or Less
55.SQLite is a Self Contained System
56.SQLite Is Serverless
57.SQLite Is Transactional
58.SQLite Library Footprint
59.SQLite Shared-Cache Mode
60.SQLite Unlock-Notify API
61.SQLite Version 3 Overview
62.SQLite: Single File Database
63.Temporary Files Used By SQLite
64.TH3
65.The COMPLETION() Table-Valued Function
66.The CSV Virtual Table
67.The dbhash.exe Utility Program
68.The DBSTAT Virtual Table
69.The Error And Warning Log
70.The generate_series Table-Valued Function
71.The OS Backend (VFS) To SQLite
72.The Spellfix1 Virtual Table
73.The SQLite Bytecode Engine
74.The sqlite3_analyzer.exe Utility Program
75.The SQLITE_STMT Virtual Table
76.The UNION Virtual Table
77.The Virtual Database Engine of SQLite
78.Uniform Resource Identifiers
79.Using SQLite In Multi-Threaded Applications
80.Version Numbers in SQLite
81.What If OpenDocument Used SQLite?
82.Why Is SQLite Coded In C
83.Zero-Configuration
Sqlite

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来

主页 https://sqlite.org/
源码 https://www.sqlite.org/src/
发布版本 3.21.0

Sqlite目录

1.C界面 | C Interface
2.C Interface: Session Module
3.CLI
4.数据库文件表 | Database File Format
5.数据类 | Datatypes
6.动态内存分配 | Dynamic Memory Allocation
7.外键约束 | Foreign Key Constraints
8.全文索引 | Full-Text Search
9.损坏方式 | How To Corrupt
10.JSON
11.语言 | Language
12.局限性 | Limits
13.锁定和并发 | Locking and Concurrency
14.其他 | Miscellaneous
15.PRAGMA Statements
16.查询计划程序 | Query Planner
17.R*Tree Module
18.RBU Extension
19.语法图 | Syntax Diagrams
20.Tcl Interface
21.虚拟表机制 | Virtual Table Mechanism
22.预写日志 | Write-Ahead Logging
23.SQL 教程
24.SQL 简介
25.SQL 语法
26.SQL DELETE 语句
27.SQL UPDATE 语句
28.SQL NOT NULL 约束
29.SQL 约束
30.SQL CREATE TABLE 语句
31.SQL CREATE DATABASE 语句
32.SQL INSERT INTO SELECT 语句
33.SQL SELECT INTO 语句
34.SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句
35.SQL AUTO INCREMENT 字段
36.SQL ALTER TABLE 语句
37.SQL 撤销索引、表以及数据库
38.SQL CREATE INDEX 语句
39.SQL DEFAULT 约束
40.SQL CHECK 约束
41.SQL FOREIGN KEY 约束
42.SQL PRIMARY KEY 约束
43.SQL UNIQUE 约束
44.SQL 通用数据类型
45.SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
46.SQL NULL 值 – IS NULL 和 IS NOT NULL
47.SQL Server 和 MySQL 中的 Date 函数
48.SQL MS Access、MySQL 和 SQL Server 数据类型
49.SQL 函数
50.SQL 总结
51.SQL 主机
52.SQL 快速参考
53.SQL ROUND() 函数
54.SQL Server GETDATE() 函数
55.MySQL DATE_FORMAT() 函数
56.MySQL DATEDIFF() 函数
57.MySQL DATE_SUB() 函数
58.MySQL DATE_ADD() 函数
59.MySQL EXTRACT() 函数
60.MySQL DATE() 函数
61.MySQL CURTIME() 函数
62.MySQL CURDATE() 函数
63.MySQL NOW() 函数
64.SQL Server CONVERT() 函数
65.SQL Server DATEDIFF() 函数
66.SQL Server DATEADD() 函数
67.SQL Server DATEPART() 函数
68.SQLite 命令
69.SQLite 安装
70.SQLite 简介
71.SQLite 运算符
72.SQLite Select 语句
73.SQLite 删除表
74.SQLite 创建表
75.SQLite Insert 语句
76.SQLite 分离数据库
77.SQLite 附加数据库
78.SQLite 创建数据库
79.SQLite 数据类型
80.SQLite 语法
81.SQLite Order By
82.SQLite Limit 子句
83.SQLite Glob 子句
84.SQLite Like 子句
85.SQLite Delete 语句
86.SQLite Update 语句
87.SQLite AND/OR 运算符
88.SQLite Where 子句
89.SQLite 表达式
90.SQLite Distinct 关键字
91.SQLite Having 子句
92.SQLite Group By
93.SQLite Join
94.SQLite 约束
95.SQLite PRAGMA
96.SQLite 事务
97.SQLite 视图
98.SQLite Truncate Table
99.SQLite Alter 命令
100.SQLite Indexed By