### SQLite3 数据库使用基础讲解 #### 一、SQLite 数据类型概述 SQLite 是一款轻量级的嵌入式数据库引擎,与其他大多数 SQL 数据库不同,它采用了一种更加灵活的动态类型系统。这意味着数据值的类型与其实际内容相关联,而非仅仅依赖于其所在的容器或列。 #### 二、存储类型 在 SQLite 中,每个值都有一个确定的存储类型: 1. **NULL**:表示空值。 2. **INTEGER**:有符号整数,根据值的大小存储为 1, 2, 3, 4, 6 或 8 字节。 3. **REAL**:双精度浮点数,存储为 8 字节。 4. **TEXT**:字符串数据,使用 UTF-8、UTF-16BE 或 UTF-16LE 编码存储。 5. **BLOB**:二进制大对象,按原样存储。 #### 三、特殊类型 - **1.1 布尔类型**:SQLite 并没有专门的布尔类型,而是使用 INTEGER 类型表示布尔值,其中 0 表示 false,1 表示 true。 - **1.2 日期和时间类型**:SQLite 没有专用的日期和时间类型,但是提供了内置函数来处理日期和时间数据。数据可以以 TEXT、REAL 或 INTEGER 形式存储: - **TEXT**:ISO 8601 格式的字符串(例如 "YYYY-MM-DD HH:MM:SS.SSS")。 - **REAL**:自格林尼治标准时间 11 月 24 日 4174 B.C 中午以来的天数。 - **INTEGER**:自 1970-01-01 00:00:00 UTC 以来的秒数。 #### 四、类型近似 类型近似是指 SQLite 中列数据的推荐存储类型,但并非强制性规定。例如,VARCHAR(255) 这样的定义在 SQLite 中并不起作用,因为 SQLite 不限制字符串、BLOB 或数值的长度(除非受到全局限制 SQLITE_MAX_LENGTH 的约束)。 #### 五、比较表达式与运算符 - **3.1 比较操作符**:SQLite 支持多种比较操作符,如 "="、"<"、">"、"!=" 等。 - **3.2 排序**:比较操作的结果取决于操作数的存储类型。例如,NULL 值被视为最小值;INTEGER 和 REAL 小于 TEXT 和 BLOB;TEXT 小于 BLOB。 #### 六、数学运算符 - **4.1 数学运算**:所有数学运算符 (+、-、*、/ 等) 在执行前都会将两个操作数转换为数值存储类型(INTEGER 或 REAL)。如果操作数为 NULL,则结果也为 NULL;如果操作数不是数字,则将其转换为 0 或 0.0。 #### 七、排序与分组 - **5.1 排序**:当使用 ORDER BY 子句对查询结果进行排序时,NULL 值排在最前面,随后是按数值顺序排列的 INTEGER 和 REAL 值,接着是 TEXT 值,最后是通过 memcmp() 排序的 BLOB 值。 - **5.2 分组**:在进行分组之前不会发生存储类的转换。 #### 八、类型映射 SQLite 中的传统 SQL 数据类型映射如下所示: | 传统 SQL 数据类型 | SQLite 映射类型 | |-------------------|---------------| | INT | INTEGER | | TINYINT | INTEGER | | SMALLINT | INTEGER | | MEDIUMINT | INTEGER | | BIGINT | INTEGER | | UNSIGNED BIGINT | INTEGER | - **优先级**:在 SQLite 中,对于没有明确指定类型的数据,通常会按照 NUMERIC 类型来处理。这意呈着数据可以根据上下文自动转换为 INTEGER 或 REAL。 #### 结论 SQLite 的灵活性使其成为许多应用程序的理想选择,尤其是在资源受限的环境中。通过了解其独特的类型系统和存储机制,开发人员可以更好地利用 SQLite 来满足不同的需求。无论是用于桌面应用还是移动设备,SQLite 都能够提供稳定而高效的性能。
- 粉丝: 0
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助