一、存储种类和数据类型:
SQLite将数据值的存储划分为以下几种存储类型:
NULL: 表示该值为NULL值。
INTEGER: 无符号整型值。
REAL: 浮点值。
TEXT: 文本字符串,存储使用的编码方式为UTF-8、UTF-16BE、UTF-16LE。
BLOB: 存储Blob数据,该类型数据和输入数据完全相同。
由于SQLite采用的是动态数据类型,而其他传统的关系型数据库使用的是静态数据类型,即字段可以存储的数据类型是在表声明时即以确定的,因此它们之间在数据存储方面还是存在着很大的差异。在SQLite中,存储分类和数据类型也有一定的差别,如INTEGER存储类别可以包含6种不同长度的Integer数据类型,然而这些INTEGER数据一旦被读入到内存后,SQLite会将其全部视为占用8个字节无符号整型。因此对于SQLite而言,即使在表声明中明确了字段类型,我们仍然可以在该字段中存储其它类型的数据。然而需要特别说明的是,尽管SQLite为我们提供了这种方便,但是一旦考虑到数据库平台的可移植性问题,我们在实际的开发中还是应该尽可能的保证数据类型的存储和声明的一致性。除非你有极为充分的理由,同时又不再考虑数据库平台的移植问题,在此种情况下确实可以使用SQLite提供的此种特征。
1. 布尔数据类型:
SQLite并没有提供专门的布尔存储类型,取而代之的是存储整型1表示true,0表示false。
2. 日期和时间数据类型:
和布尔类型一样,SQLite也同样没有提供专门的日期时间存储类型,而是以TEXT、REAL和INTEGER类型分别不同的格式表示该类型,如:
TEXT: "YYYY-MM-DD HH:MM:SS.SSS"
REAL: 以Julian日期格式存储
INTEGER: 以Unix时间形式保存数据值,即从1970-01-01 00:00:00到当前时间所流经的秒数。
二、类型亲缘性:
为了最大化SQLite和其它数据库引擎之间的数据类型兼容性,SQLite提出了"类型亲缘性(Type Affinity)"的概念。我们可以这样理解"类型亲缘性 ",在表字段被声明之后,SQLite都会根据该字段声明时的类型为其选择一种亲缘类型,当数据插入时,该字段的数据将会优先采用亲缘类型作为该值的存储方式,除非亲缘类型不匹配或无法转换当前数据到该亲缘类型,这样SQLite才会考虑其它更适合该值的类型存储该值。SQLite目前的版本支持以下五种亲缘类型:
亲缘类型 | 描述 |
TEXT | 数值型数据在被插入之前,需要先被转换为文本格式,之后再插入到目标字段中。 |
NUMERIC | 当文本数据被插入到亲缘性为NUMERIC的字段中时,如果转换操作不会导致数据信息丢失以及完全可逆,那么SQLite就会将该文本数据转换为INTEGER或REAL类型的数据,如果转换失败,SQLite仍会以TEXT方式存储该数据。对于NULL或BLOB类型的新数据,SQLite将不做任何转换,直接以NULL或BLOB的方式存储该数据。需要额外说明的是,对于浮点格式的常量文本,如"30000.0",如果该值可以转换为INTEGER同时又不会丢失数值信息,那么SQLite就会将其转换为INTEGER的存储方式。 |
INTEGER | 对于亲缘类型为INTEGER的字段,其规则等同于NUMERIC,唯一差别是在执行CAST表达式时。 |
REAL | 其规则基本等同于NUMERIC,唯一的差别是不会将"30000.0"这样的文本数据转换为INTEGER存储方式。 |
NONE | 不做任何的转换,直接以该数据所属的数据类型进行存储。 |
1. 决定字段亲缘性的规则:
字段的亲缘性是根据该字段在声明时被定义的类型来决定的,具体的规则可以参照以下列表。需要注意的是以下列表的顺序,即如果某一字段类型同时符合两种亲缘性,那么排在前面的规则将先产生作用。
1). 如果类型字符串中包含"INT",那么该字段的亲缘类型是INTEGER。
2). 如果类型字符串中包含"CHAR"、"CLOB"或"TEXT",那么该字段的亲缘类型是TEXT,如VARCHAR。
3). 如果类型字符串中包含"BLOB",那么该字段的亲缘类型是NONE。
4). 如果类型字符串中包含"REAL"、"FLOA"或"DOUB",那么该字段的亲缘类型是REAL。
5). 其余情况下,字段的亲缘类型为NUMERIC。
2. 具体示例:
声明类型 | 亲缘类型 | 应用规则 |
INT INTEGER TINYINT SMALLINT MEDIUMINT BIGINT UNSIGNED BIG INT INT2 INT8 |
INTEGER | 1 |
CHARACTER(20) VARCHAR(255) VARYING CHARACTER(255) NCHAR(55) NATIVE CHARACTER(70) NVARCHAR(100) TEXT CLOB |
TEXT | 2 |
BLOB | NONE | 3 |
REAL DOUBLE DOUBLE PRECISION FLOAT |
REAL | 4 |
NUMERIC DECIMAL(10,5) BOOLEAN DATE DATETIME |
NUMERIC | 5 |
注:在SQLite中,类型VARCHAR(255)的长度信息255没有任何实际意义,仅仅是为了保证与其它数据库的声明一致性。
三、比较表达式:
在SQLite3中支持的比较表达式有:"=", "==", "<", "<=", ">", ">=", "!=", "<>", "IN", "NOT IN", "BETWEEN", "IS" and "IS NOT"。
数据的比较结果主要依赖于操作数的存储方式,其规则为:
1). 存储方式为NULL的数值小于其它存储类型的值。
2). 存储方式为INTEGER和REAL的数值小于TEXT或BLOB类型的值,如果同为INTEGER或REAL,则基于数值规则进行比较。
3). 存储方式为TEXT的数值小于BLOB类型的值,如果同为TEXT,则基于文本规则(ASCII值)进行比较。
4). 如果是两个BLOB类型的数值进行比较,其结果为C运行时函数memcmp()的结果。
四、操作符:
所有的数学操作符(+, -, *, /, %, <<, >>, &, and |)在执行之前都会先将操作数转换为NUMERIC存储类型,即使在转换过程中可能会造成数据信息的丢失。此外,如果其中一个操作数为NULL,那么它们的结果亦为NULL。在数学操作符中,如果其中一个操作数看上去并不像数值类型,那么它们结果为0或0.0。
相关推荐
SQLite学习手册(数据类型) 一、存储种类和数据类型 二、类型亲缘性 三、比较表达式 四、操作符 SQLite学习手册(命令行工具) SQLite学习手册(在线备份) 一、常用备份 二、在线备份APIs简介 三、高级应用技巧 SQLite...
2. **存储类型**:数据类型灵活,支持NULL、整型、浮点型、字符串和BLOB(二进制大对象)。 3. **索引**:支持B树索引,提高查询效率。 4. **触发器**:可以创建在特定操作(如INSERT、UPDATE或DELETE)发生时自动...
5. **表和数据类型**:说明如何定义表格结构,理解SQLite支持的内置数据类型,如NULL、INTEGER、REAL、TEXT和BLOB。 6. **事务处理**:解释SQLite的事务机制,包括ACID属性(原子性、一致性、隔离性和持久性)及其...
4. **数据类型**:介绍SQLite的动态类型系统,包括NULL、INTEGER、REAL、TEXT和BLOB等基本类型,以及它们的使用和转换规则。 5. **索引与优化**:讨论如何创建和使用索引来提高查询性能,以及如何分析和优化查询...
它具有动态类型系统,支持NULL、INTEGER、REAL、TEXT和BLOB五种基本数据类型。 3. 数据库操作 - 表管理:CREATE TABLE用于创建表,ALTER TABLE支持修改表结构,DROP TABLE删除表。 - 索引:CREATE INDEX可创建索...
教程,安装,命令,语法,数据类型,创建数据库,附加数据库,分离数据库,创建表,删除表,insert语句,select语句,运算符,表达式,where子句,and/or运算符,update子句,like, group,limit, order by, having ...
SQLite的数据类型包括NULL、INTEGER、REAL、TEXT和BLOB。其中,INTEGER可以自动适应整数大小,REAL是浮点数,TEXT用于存储文本,BLOB用于存储二进制数据。 三、数据插入 使用`INSERT INTO`语句将数据插入到表中,...
- **创建表**:使用`CREATE TABLE`语句定义表结构,包括列名、数据类型和约束条件。 - **插入数据**:使用`INSERT INTO`语句将数据插入到表中。 - **查询数据**:`SELECT`语句是查询的核心,可以与`WHERE`、`...
关键数据结构:sqlite3* 类型是 SQLite 中最常用的数据结构,从数据库打开开始,SQLite 就要为这个类型准备好内存,直到数据库关闭,整个过程都需要用到这个类型。 ii. 打开数据库:使用 int sqlite3_open(文件名,...
此外,SQLite还支持各种表达式和数据类型的操作,例如存储种类、类型亲缘性、比较表达式和操作符。 SQLite的命令行工具提供了数据库管理的基本操作,如创建、查询和更新数据库。在线备份功能使得数据库备份更加方便...
1. **数据类型**:SQL中的基本数据类型有整数(INTEGER)、浮点数(REAL)、字符串(TEXT)、二进制数据(BLOB)等。 2. **表操作**:CREATE TABLE用于创建表,ALTER TABLE用于修改表结构,DROP TABLE用于删除表。 3...
SQLite是一种开源、轻量级的嵌入式关系型数据库,广泛应用于移动应用、桌面应用以及Web服务中。它不需要单独的服务器进程,而是作为一个...通过学习和实践,你可以有效地利用SQLite构建高效、稳定的数据存储解决方案。
`SQLite学习手册_中文全本.pdf` 是一本全面介绍SQLite的中文教程,涵盖了从基础概念如表的创建、数据类型、SQL语法,到高级特性如事务处理、索引、视图、触发器,以及存储过程等内容。通过阅读这本书,读者可以系统...
而"手册.rar"则可能是SQLite Database Browser的中文手册,包含了关于如何使用这个工具的详细说明和操作指南,对于初学者来说非常有帮助。 总的来说,SQLite是一个强大的数据库解决方案,尤其适合于嵌入式系统和...
- **表(Table)**:表是存储数据的基本单位,由行和列组成,每一列代表一个特定的数据类型。 - **查询(Query)**:通过SQL查询语句来检索、更新或删除数据。 - **索引(Index)**:用于加速数据检索速度的一种特殊类型的...
3. 数据类型:SQLite 的动态数据类型系统,包括 NULL、INTEGER、REAL、TEXT 和 BLOB,以及它们之间的自动转换规则。 4. 表与索引:学习如何创建、修改和删除表,以及如何为表添加索引以提高查询性能。 5. 查询优化...
3. 学习资料:压缩包可能包含SQLite3的官方文档、教程、API参考手册等,这些都是学习SQLite3的关键资源。官方文档通常详细介绍了如何创建数据库、执行SQL语句、管理事务以及处理错误等。 4. 实例项目:压缩包中的...
此外,SQLite3支持存储“blob”类型,即二进制数据,通过示例程序“eatblob.c”,我们可以读取任意大小的二进制文件到内存,并将其存储在用户指定的字段中,这为处理图像、音频等非文本数据提供了便利。 #### 示例...
SQLite采用动态类型系统,字段的数据类型可以根据实际存储的数据进行自动转换。 #### 六、创建索引 - **索引作用**:通过创建索引来提高查询效率,特别是对于包含大量数据的表。 - **示例命令**:`CREATE INDEX ...