自己的九又四分之三站台

自己的九又四分之三站台

1.关于Sqlite

SQLite 是一个进程内库,它实现了一个独立的、无服务器的、零配置的事务性 SQL 数据库引擎。 SQLite的代码属于公共领域,因此对 用于任何目的,商业或私人目的。 SQLite是世界上部署最广泛的数据库 应用程序比我们能做的要多 计数,包括几个备受瞩目的项目。

SQLite 是一个嵌入式 SQL 数据库引擎。 与大多数其他 SQL 数据库不同,SQLite 没有单独的 服务器进程。SQLite直接读取和写入普通磁盘 文件。一个完整的 SQL 数据库,包含多个表、索引、 触发器和视图包含在单个磁盘文件中。 数据库文件格式是跨平台的 - 您可以自由复制数据库 在 32 位和 64 位系统之间或 big-endian 和 little-endian 体系结构之间。这些功能使 SQLite 成为受欢迎的选择,因为 应用程序文件格式。SQLite 数据库文件是美国国会图书馆推荐的存储格式。 不要把SQLite看作是Oracle的替代品,而是 作为 fopen() 的替代品。

SQLite 是一个紧凑的库。 启用所有功能后,库大小可以小于 750KiB, 取决于目标平台和编译器优化设置。 (64 位代码较大。以及一些编译器优化 例如激进的功能内联和循环展开会导致 目标代码要大得多。 内存使用量和速度之间存在权衡。 SQLite通常你给它内存越多,运行得越快,。尽管如此,在低内存环境中性能通常也相当不错。根据其使用方式,SQLite 可能比直接文件系统 I/O 更快。

2.SQLite的适当用途

SQLite 不能直接与客户端/服务器 SQL 数据库引擎相提并论,例如 作为 MySQL、Oracle、PostgreSQL 或 SQL Server,因为 SQLite 正在尝试 解决不同的问题。

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

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

2.1.SQLite运行良好的情况

2.1.1. 嵌入式设备和物联网

由于 SQLite 数据库不需要管理, 它适用于必须在没有专家人工支持的情况下运行的设备。 SQLite 非常适合用于 手机、机顶盒、电视机、游戏机、 相机、手表、厨房电器、恒温器、汽车、 机床、飞机、遥感器、无人机、医疗设备、 和机器人:“物联网”。

客户机/服务器数据库引擎被设计为驻留在网络核心的一个受人喜爱的数据中心内。SQLite也在那里工作,但SQLite也在网络边缘蓬勃发展,在为应用程序提供快速可靠的数据服务的同时,为那些连接不可靠的应用程序提供了自己的服务。

2.1.2. 应用程序文件格式

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

这种方法有很多好处,包括改进 性能,降低成本和复杂性,以及 提高可靠性。

3.SQLite的显着特点

3.1.零配置

3.2.无服务器

3.3单一数据库文件

3.4.稳定的跨平台数据库文件

3.5.紧凑的

3.6.清单类型

3.7.可变长度记录

3.8.可读的源代码

3.9.SQL 语句编译为虚拟机代码

3.10.SQL 语言扩展

4.SQLite中的一些说明

4.1.SQLite是嵌入式的,而不是客户端-服务器

每当将 SQLite 与其他 SQL 数据库引擎进行比较时,例如 SQL Server、PostgreSQL、MySQL 或 Oracle,首先很重要 意识到SQLite并非旨在替代或竞争对手 这些系统中的任何一个。SQLite 是无服务器的。没有单独的 管理数据库的服务器进程。应用程序交互 使用数据库引擎使用函数调用,而不是通过发送消息 到单独的进程或线程。

事实上,SQLite是嵌入式和无服务器的,而不是 客户端/服务器是一个功能,而不是一个错误。

客户端/服务器数据库,如 MySQL、PostgreSQL、SQL Server、Oracle 和 其他的则是现代系统的重要组成部分。 这些系统解决了一个重要问题。 但是SQLite解决了一个不同的问题。 SQLite 和客户端/服务器数据库都有其作用。 将 SQLite 与其他 SQL 数据库引擎进行比较的开发人员需要 以清楚地理解这种区别。

4.2.灵活的数据类型

SQLite在数据类型方面是灵活的。数据类型是建议性的 而不是强制性的。

一些评论家说SQLite是“弱类型”,而其他 SQL 数据库是“强类型”的。我们认为这些条款是 不准确,甚至贬义。我们更愿意说SQLite是 “灵活类型”,其他 SQL 数据库引擎是 “刚性类型”。

4.2.1.没有单独的布尔数据类型

与大多数其他 SQL 实现不同, SQLite 没有单独的 BOOLEAN 数据类型。 相反,TRUE 和 FALSE (通常)表示为整数 1 和 0, 分别。 这似乎不会造成很多问题,因为我们很少收到投诉 关于它。但重要的是要认识到这一点。

从 SQLite 版本 3.23.0 (2018-04-02) 开始,SQLite 还 将 TRUE 和 FALSE 关键字识别为整数值 1 和 0 的别名, 分别。 这提供了与其他 SQL 实现的更好兼容性。 但为了向后兼容,如果有名为 TRUE 或 FALSE,则这些关键字将被视为引用这些关键字的标识符 列,而不是布尔文本。

4.2.2.没有单独的 DATETIME 数据类型

SQLite 没有 DATETIME 数据类型。 相反,可以通过以下任何一种方式存储日期和时间:

作为 ISO-8601 格式的 TEXT 字符串。示例:“2018-04-02 12:13:46”。
作为自 1970 年以来的整数秒数(也称为“unix 时间”)。

4.2.3.数据类型是可选的

因为SQLite在数据类型方面是灵活和宽容的, 可以创建完全没有指定数据类型的表列。 例如:

CREATE TABLE t1(a,b,c,d);

表“t1”有四列“a”、“b”、“c”和“d”,它们具有 未分配特定数据类型。你可以存储任何你想要的东西 这些列中的任何一个。

4.2.4.默认情况下,外键强制执行处于关闭状态

4.2.5.PRIMARY KEYs 有时可以包含 NULL

4.2.13.SQLite 区分整数和文本文字

SQLite 表示以下查询返回 false:

SELECT 1='1';

它之所以这样做,是因为整数不是字符串。 其他所有主要的 SQL 数据库引擎都说这是真的,这是有原因的 SQLite的创建者不明白。

02-27 10:46