非常教程

Sqlite参考手册

其他 | Miscellaneous

Distinctive Features Of SQLite

本页重点介绍了SQLite的一些特性,这些特性是不寻常的,它使SQLite与许多其他SQL数据库引擎不同。

零配置

SQLite在使用之前不需要“安装”。没有“设置”程序。没有需要启动,停止或配置的服务器进程。无需管理员创建新的数据库实例或为用户分配访问权限。SQLite不使用配置文件。不需要做任何事情来告诉系统SQLite正在运行。系统崩溃或电源故障后无需执行任何操作即可恢复。没有什么可以排除故障。SQLite正常工作。其他更熟悉的数据库引擎运行良好,一旦你让他们去。但是执行初始安装和配置可能会非常复杂。

无服务器

大多数SQL数据库引擎是作为单独的服务器进程实现的。要访问数据库的程序使用某种进程间通信(通常为TCP / IP)与服务器通信,以向服务器发送请求并接收返回的结果。SQLite不能这样工作。使用SQLite,想要访问数据库的进程直接从磁盘上的数据库文件读取和写入数据。没有中间服务器进程。无服务器有优点和缺点。主要优点是没有单独的服务器进程来安装,设置,配置,初始化,管理和排除故障。这是SQLite是一个“零配置”数据库引擎的原因之一。使用SQLite的程序在运行之前不需要管理支持来设置数据库引擎。任何能够访问磁盘的程序都可以使用SQLite数据库。另一方面,使用服务器的数据库引擎可以更好地防止客户端应用程序中的错误 - 客户端中的杂散指针不会破坏服务器上的内存。而且由于服务器是一个持久性进程,因此可以更精确地控制数据库访问,从而实现更好的颗粒锁定和更好的并发性。大多数SQL数据库引擎都是基于客户/服务器的 在没有服务器的情况下,SQLite是这位作者唯一知道的允许多个应用程序同时访问同一个数据库的人。使用服务器的数据库引擎可以更好地保护客户端应用程序中的错误 - 客户端中的杂散指针不会损坏服务器上的内存。而且由于服务器是一个持久性进程,因此可以更精确地控制数据库访问,从而实现更好的颗粒锁定和更好的并发性。大多数SQL数据库引擎都是基于客户/服务器的 在没有服务器的情况下,SQLite是这位作者唯一知道的允许多个应用程序同时访问同一个数据库的人。使用服务器的数据库引擎可以更好地保护客户端应用程序中的错误 - 客户端中的杂散指针不会损坏服务器上的内存。而且由于服务器是一个持久性进程,因此可以更精确地控制数据库访问,从而实现更好的颗粒锁定和更好的并发性。大多数SQL数据库引擎都是基于客户/服务器的 在没有服务器的情况下,SQLite是这位作者唯一知道的允许多个应用程序同时访问同一个数据库的人。

单个数据库文件

SQLite数据库是一个单一的普通磁盘文件,可以位于目录层次结构中的任何位置。如果SQLite可以读取磁盘文件,那么它可以读取数据库中的任何内容。如果磁盘文件及其目录是可写的,则SQLite可以更改数据库中的任何内容。数据库文件可以很容易地复制到USB记忆棒上或通过电子邮件发送给共享。其他SQL数据库引擎倾向于将数据存储为大量文件集合。这些文件通常位于只有数据库引擎本身才能访问的标准位置。这使数据更安全,但也使访问更加困难。一些SQL数据库引擎提供了直接写入磁盘和绕过文件系统的选项。这提供了额外的性能,但代价是相当大的设置和维护复杂性。

稳定的跨平台数据库文件

SQLite文件格式是跨平台的。写在一台机器上的数据库文件可以复制到具有不同体系结构的不同机器上使用。大端或小端,32位或64位无关紧要。所有机器使用相同的文件格式。此外,开发人员已承诺保持文件格式稳定并向后兼容,因此较新版本的SQLite可以读取和写入较旧的数据库文件。大多数其他SQL数据库引擎要求您在从一个平台移动到另一个平台时转储和恢复数据库,并且通常在升级到较新版本的软件时。

简化

当针对大小进行优化时,整个SQLite库的大小都小于500KiB(使用GNU编译器套件中的“size”实用程序在ix86上测量)。可以在编译时禁用不需要的功能,以进一步减少如果需要,可将库的大小降至300KiB以下。大多数其他SQL数据库引擎比这个大得多。IBM吹嘘自己最近发布的CloudScape数据库引擎“仅”是一个2MiB的jar文件 - 即使在压缩后也比SQLite大一个数量级!Firebird吹嘘它的客户端库只有350KiB。这与SQLite一样大,甚至不包含数据库引擎。Oracle的Berkeley DB库是450KiB,它省略了SQL支持,为编程人员提供了简单的键/值对。

宣告形态

大多数SQL数据库引擎使用静态类型。数据类型与表中的每列相关联,并且只允许将该特定数据类型的值存储在该列中。SQLite通过使用清单类型来放宽这个限制。在清单键入中,数据类型是值本身的属性,而不是存储值的列的属性。因此SQLite允许用户将任何数据类型的任何值存储到任何列中,而不管该列的声明类型如何。(这个规则有一些例外:INTEGER PRIMARY KEY列可能只存储整数,而SQLite会尝试将值强制转换为列的声明数据类型。)就我们所知,SQL语言规范允许使用清单输入。尽管如此,大多数其他SQL数据库引擎是静态类型的,所以有些人认为使用清单类型是SQLite中的一个错误。但SQLite的作者非常强烈地认为这是一个特性。在SQLite中使用清单输入是一个有意的设计决策,在实践中证明它使SQLite更加可靠和易于使用,特别是当与Tcl和Python等动态类型编程语言结合使用时。

可变长度记录

大多数其他SQL数据库引擎为大多数表中的每行分配了固定数量的磁盘空间。他们玩特殊技巧来处理BLOB和CLOB,这些BLOB和CLOB的长度可能变化很大。但是对于大多数表格,如果你声明一个列是VARCHAR(100),那么数据库引擎将分配100字节的磁盘空间,而不管你实际存储在该列中的信息量有多少。相比之下,SQLite仅使用实际需要的磁盘空间量来存储信息。如果将单个字符存储在VARCHAR(100)列中,则只消耗一个字节的磁盘空间。(实际上是两个字节 - 每列开始处有一些开销来记录它的数据类型和长度。)SQLite使用可变长度记录具有许多优点。它显然会导致较小的数据库文件。它还使数据库运行得更快,因为移动和移出磁盘的信息较少。而且,使用可变长度的记录使得SQLite可以使用清单类型而不是静态类型。

可读的源代码

SQLite的源代码旨在为普通程序员提供可读性和可访问性。所有程序和数据结构以及许多自动变量都会被仔细评论,并提供有关他们所做工作的有用信息。样板评论被省略。

SQL语句编译成虚拟机代码

每个SQL数据库引擎都将每个SQL语句编译成某种内部数据结构,然后用它来执行语句的工作。但是在大多数SQL引擎中,内部数据结构是一个由相互关联的结构和对象组成的复杂网络。在SQLite中,编译的语句形式是一种类似于机器语言的简短程序。通过将EXPLAIN关键字添加到查询中,数据库的用户可以查看此虚拟机语言。在SQLite中使用虚拟机对图书馆的开发有很大的好处。虚拟机在SQLite的前端(解析SQL语句并生成虚拟机代码的部分)和后端(执行虚拟机代码并计算结果的部分)之间提供了一个清晰明确的连接。)虚拟机允许开发人员清楚地看到SQLite试图处理它编译的每条语句,这对调试有很大的帮助。根据编译的方式,SQLite还可以跟踪虚拟机的执行情况 - 在执行时打印每个虚拟机指令及其结果。

公共区域

SQLite的源代码处于公有领域。核心源代码的任何部分均不提供版权声明。(文档和测试代码是另一回事 - 文档和测试逻辑的某些部分由开源许可证管理。)SQLite核心软件的所有贡献者都已签署誓章,明确否认代码中的任何版权利益。这意味着任何人都可以通过SQLite源代码合法地完成他们想要的任何事情。还有其他带有自由许可的SQL数据库引擎,允许代码被广泛和自由地使用。但那些其他引擎仍受版权法管辖。SQLite的不同之处在于版权法根本不适用。其他SQL数据库引擎的源代码文件通常以描述您查看和复制该文件的合法权限的评论开始。SQLite源代码不包含任何许可证,因为它不受版权法管辖。SQLite源代码代替许可证提供了一个祝福: 愿你行善而不恶, 愿你为自己找到原谅,原谅别人, 愿你分享自由,永不止于你付出。

SQL语言扩展

SQLite提供了一些在其他数据库引擎中通常不能找到的SQL语言的增强功能。上面已经提到了EXPLAIN关键字和清单类型。SQLite还提供了诸如REPLACE和ON CONFLICT子句之类的语句,以允许增加对约束冲突解决方案的控制。SQLite支持ATTACH和DETACH命令,允许多个独立的数据库在同一个查询中一起使用。SQLite定义了API,允许用户添加新的SQL函数和整理序列。

 SQLite在公共领域。

其他 | 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.EXPLAIN QUERY PLAN
16.Features Of SQLite
17.File Format Changes in SQLite
18.Full-Featured SQL
19.High Reliability
20.Hints for Debugging SQLite
21.How SQLite Is Tested
22.How To Compile SQLite
23.How To Download Canonical SQLite Source Code
24.Imposter Tables
25.In-Memory Databases
26.Indexes On Expressions
27.Internal Versus External BLOBs
28.Isolation In SQLite
29.Long Term Support
30.Maintaining Private Branches Of SQLite
31.Many Small Queries Are Efficient In SQLite
32.Measuring and Reducing CPU Usage in SQLite
33.Memory-Mapped I/O
34.NULL Handling in SQLite
35.Partial Indexes
36.Pointer Passing Interfaces
37.Powersafe Overwrite
38.Release History Of SQLite
39.Result and Error Codes
40.Row Values
41.Rowid Tables
42.Run-Time Loadable Extensions
43.SQL Features That SQLite Does Not Implement
44.sqldiff.exe: Database Difference Utility
45.SQLite As An Application File Format
46.SQLite Autoincrement
47.SQLite Backup API
48.SQLite Changes From Version 3.4.2 To 3.5.0
49.SQLite Changes From Version 3.5.9 To 3.6.0
50.SQLite Database Speed Comparison
51.SQLite File IO Specification
52.SQLite Frequently Asked Questions
53.SQLite In 5 Minutes Or Less
54.SQLite is a Self Contained System
55.SQLite Is Serverless
56.SQLite Is Transactional
57.SQLite Library Footprint
58.SQLite Shared-Cache Mode
59.SQLite Unlock-Notify API
60.SQLite Version 3 Overview
61.SQLite: Single File Database
62.Temporary Files Used By SQLite
63.TH3
64.The COMPLETION() Table-Valued Function
65.The CSV Virtual Table
66.The dbhash.exe Utility Program
67.The DBSTAT Virtual Table
68.The Error And Warning Log
69.The generate_series Table-Valued Function
70.The OS Backend (VFS) To SQLite
71.The Spellfix1 Virtual Table
72.The SQLite Amalgamation
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