非常教程

Sqlite参考手册

其他 | Miscellaneous

Appropriate Uses For SQLite

由于SQLite试图解决不同的问题,因此SQLite不能与客户端/服务器SQL数据库引擎(如MySQL,Oracle,PostgreSQL或SQL Server)直接比较。

客户端/服务器SQL数据库引擎力求实现企业数据的共享存储库。他们强调可扩展性,并发性,集中和控制。SQLite致力于为单个应用程序和设备提供本地数据存储。SQLite强调经济性,效率,可靠性,独立性和简单性。

SQLite不与客户端/服务器数据库竞争。SQLite与fopen()竞争。

SQLite工作得很好的情况

  • 嵌入式设备和物联网由于SQLite数据库不需要管理,因此在需要专业人员支持的情况下才能运行的设备中运行良好。SQLite非常适合用在手机,机顶盒,电视机,游戏机,相机,手表,厨房用具,恒温器,汽车,机床,飞机,遥感器,无人机,医疗设备和机器人中:“万物互联”。客户端/服务器数据库引擎被设计为位于网络核心的一个可爱的数据中心内。SQLite也可以在那里工作,但SQLite也在网络边缘蓬勃发展,为自己提供支持,同时为应用程序提供快速和可靠的数据服务,否则这些应用程序会存在不可靠的连接。
  • 应用文件格式

SQLite通常用作桌面应用程序的磁盘文件格式,如版本控制系统,财务分析工具,媒体编目和编辑套件,CAD软件包,记录保存程序等等。传统的File / Open操作调用sqlite3_open()以附加到数据库文件。更新应用程序内容时会自动更新,因此文件/保存菜单选项变得多余。File / Save_As菜单选项可以使用备份API来实现。

这种方法有许多好处,包括改进的应用程序性能,降低的成本和复杂性以及提高的可靠性。有关详情,请参阅此处和此处的技术说明。

  • 网站 SQLite作为大多数中低流量网站(也就是说大多数网站)的数据库引擎工作良好。SQLite可以处理的网络流量取决于网站使用其数据库的程度。一般来说,任何每天点击次数少于100K的站点应该可以很好地使用SQLite。100K点击/日数是一个保守的估计,而不是一个硬性上限。SQLite已被证明可以处理10倍的流量。SQLite网站(https://www.sqlite.org/)当然使用SQLite本身,并且在撰写本文时(2015年),它每天处理大约400K到500K的HTTP请求,其中约15-20%是动态页面接触数据库。动态内容每个网页使用大约200个SQL语句。这种设置运行在一台共享23台物理服务器的虚拟机上,但大部分时间仍然保持平均负载低于0.1。
  • 数据分析

理解SQL的人可以使用sqlite3命令行shell(或各种第三方SQLite访问程序)来分析大型数据集。可以从CSV文件导入原始数据,然后可以对数据进行切片和切块以生成大量摘要报告。使用用Tcl或Python编写的简单脚本(这两种脚本都内置SQLite)或R或其他语言使用易于使用的适配器可以完成更复杂的分析。可能的用途包括网站日志分析,体育统计分析,编程指标汇编和实验结果分析。许多生物信息学研究人员以这种方式使用SQLite。

当然,使用企业客户端/服务器数据库也可以做同样的事情。SQLite的优点是安装和使用起来更容易,并且生成的数据库是可以写入USB记忆棒或通过电子邮件发送给同事的单个文件。

  • 缓存企业数据 许多应用程序使用SQLite作为企业RDBMS相关内容的缓存。这可以减少延迟,因为现在大多数查询都是针对本地缓存进行的,并避免了网络往返。它还减少了网络和中央数据库服务器上的负载。在很多情况下,这意味着客户端应用程序可以在网络中断期间继续运行。
  • 服务器端数据库

系统设计人员使用SQLite作为数据中心中运行的服务器应用程序上的数据存储,或者换句话说,使用SQLite作为特定于应用程序的数据库服务器的基础存储引擎报告成功。

使用这种模式,整个系统仍然是客户端/服务器:客户端向服务器发送请求并通过网络取回回应。但不是发送通用SQL并获取原始表内容,客户端请求和服务器响应是高级别的和特定于应用程序的。服务器将请求转换为多个SQL查询,收集结果,执行后处理,过滤和分析,然后构造仅包含基本信息的高级回复。

开发人员报告说,在这种情况下,SQLite通常比客户端/服务器SQL数据库引擎更快。数据库请求由服务器序列化,因此并发不是问题。“数据库分片”也改进了并发性:对不同的子域使用单独的数据库文件。例如,服务器可能为每个用户都有一个单独的SQLite数据库,以便服务器可以处理数百或数千个同时连接,但每个SQLite数据库仅由一个连接使用。

  • 文件档案 的SQLite的归档项目显示的SQLite如何被用作ZIP压缩文件或压缩包的替代品。存储在SQLite中的文件存档只比相应的ZIP存档稍大,在某些情况下实际上更小。SQLite存档功能增量式和原子式更新以及存储更丰富元数据的功能。SQLite存档作为广播给许多客户端的软件或内容更新的分发格式很有用。例如,这种想法的变化被用于将电视节目指南传输到机顶盒并向车载导航系统发送无线更新。
  • 替换 ad hoc 磁盘文件

许多程序使用fopen(),fread()和fwrite()以本地格式创建和管理数据文件。SQLite特别适合替代这些ad hoc数据文件。

  • 内部数据库或临时数据库 对于有很多数据必须以多种方式进行筛选和排序的程序,将数据加载到内存中的SQLite数据库并使用带连接和ORDER BY子句的查询来提取数据通常更容易和更快速需要表单和顺序中的数据,而不是尝试手动编写相同的操作。以这种方式在内部使用SQL数据库还可以提高程序的灵活性,因为可以添加新列和索引而无需重新编码每个查询。
  • 在演示或测试期间为企业数据库提供支持

客户端应用程序通常使用允许连接到各种SQL数据库引擎的通用数据库接口。将SQLite包含在支持的数据库中并将SQLite引擎静态链接到客户端是非常有意义的。这样客户端程序就可以与SQLite数据文件独立使用以进行测试或演示。

  • 教育和培训 因为安装和使用起来很简单(安装非常简单:只需将sqlite3sqlite3.exe可执行文件复制到目标机器并运行它),SQLite就是一个很好的数据库引擎,可用于教授SQL。学生可以轻松创建任意数量的数据库,并可以通过电子邮件将数据库发送给教师进行评论或评分。对于那些有兴趣研究RDBMS如何实现的高级学生来说,模块化且经过充分评论和记录的SQLite代码可以作为一个很好的基础。
  • 实验性的SQL语言扩展

SQLite的简单模块化设计使其成为原型开发新的实验性数据库语言特性或想法的良好平台。

客户端/服务器RDBMS可能工作得更好的情况

  • 客户端/服务器应用 如果有很多客户端程序通过网络将SQL发送到同一个数据库,则使用客户端/服务器数据库引擎而不是SQLite。SQLite将通过网络文件系统工作,但由于与大多数网络文件系统相关的延迟,性能不会太好。另外,文件锁定逻辑在许多网络文件系统实现中(在Unix和Windows上)都有问题。如果文件锁定无法正常工作,两个或多个客户端可能会尝试同时修改同一数据库的同一部分,从而导致损坏。因为这个问题是由底层文件系统实现中的错误引起的,所以SQLite没有办法阻止它。
  • 大量的网站

SQLite通常会正常工作,因为网站的数据库后端。但是如果网站的写入密集型或繁忙以至于需要多台服务器,那么可以考虑使用企业级客户端/服务器数据库引擎而不是SQLite。

  • 非常大的数据集 SQLite数据库的大小限制为140 TB(247字节,128 tibibytes)。即使它可以处理更大的数据库,SQLite也会将整个数据库存储在单个磁盘文件中,并且许多文件系统将文件的最大大小限制为小于此值。因此,如果您正在考虑这种数量级别的数据库,则最好考虑使用客户端/服务器数据库引擎,将其内容分布到多个磁盘文件中,也可能跨多个卷。
  • 高并发性

SQLite支持无限数量的同步阅读器,但它只允许一个作者在任何瞬间。对于很多情况,这不是问题。作家排队。每个应用程序都快速完成其数据库工作并继续前进,并且不会有超过几十毫秒的锁定。但是有一些应用程序需要更多的并发性,而这些应用程序可能需要寻求不同的解决方案。

核对清单选择正确的数据库引擎

  1. 数据是否通过网络与应用程序分离?→选择客户端/服务器 关系数据库引擎充当带宽减少数据过滤器。因此,最好将数据库引擎和数据保持在同一物理设备上,以便高带宽引擎到磁盘链路不必遍历网络,而只需要较低带宽的应用程序引擎链路。但SQLite内置于应用程序中。因此,如果数据位于应用程序的独立设备上,则需要在网络中使用更高带宽的引擎至磁盘链接。这有效,但它并不理想。因此,当数据位于应用程序的单独设备上时,选择客户端/服务器数据库引擎通常会更好。 Nota Bene:在这个规则中,“应用程序”是指发布SQL语句的代码。如果“应用程序”是应用程序服务器,并且内容驻留在与应用程序服务器相同的物理机器上,那么即使最终用户离开另一个网络,SQLite也仍然适用。
  1. 许多并发编译人员?→选择客户端/服务器

如果许多线程和/或进程需要在同一时刻写入数据库(并且它们不能排队等待),那么最好选择一个支持该功能的数据库引擎,这总是意味着客户端/服务器数据库引擎。

SQLite每个数据库文件一次只支持一个编写器。但在大多数情况下,写入事务只需要几毫秒,因此多个写入者可以轮流进行。SQLite将处理许多人怀疑的更多写入并发性。尽管如此,客户端/服务器数据库系统,因为他们有一个长期运行的服务器进程来协调访问,通常可以处理比SQLite更多的写入并发性。

  1. 大数据?→选择客户端/服务器 如果您的数据将增长到您不舒服或无法放入单个磁盘文件的大小,则应选择SQLite以外的解决方案。假设你可以找到一个支持140-terabyte文件的磁盘驱动器和文件系统,SQLite支持最大140TB的数据库。即使如此,当内容大小看起来可能会爬到TB级时,最好考虑集中式客户机/服务器数据库。
  1. 否则→选择SQLite!

对于低写入器并发性和小于1TB内容的设备本地存储,SQLite几乎总是一个更好的解决方案。SQLite快速可靠,无需配置或维护。它让事情变得简单。SQLite“正常工作”。

 SQLite在公共领域。

其他 | Miscellaneous相关

1.35% Faster Than The Filesystem
2.8+3 Filenames
3.An Asynchronous I/O Module For SQLite
4.Architecture of SQLite
5.Atomic Commit In SQLite
6.Automatic Undo/Redo With SQLite
7.Benefits of SQLite As A File Format
8.Change in Default Page Size in SQLite Version 3.12.0
9.Clustered Indexes and the WITHOUT ROWID Optimization
10.Compile-time Options
11.Constraint Conflict Resolution in SQLite
12.Custom Builds Of SQLite
13.Deterministic SQL Functions
14.Distinctive Features Of SQLite
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