嵌入式数据库开发编程(三)——sqlite3数据类型和存储类型
文章目录
导航
- SQL语法
- 创建数据库
- 数据查询御酒
- 数据操纵语言
- C API
一、SQL语言
数据定义(DDL) :用户定义、删除和修改数据模式
数据查询(DQL) :用于查询数据
数据操纵(DML) :用于增、删、改数据
数据控制(DCL) :用于控制数据访问权限
SQL的语法很像自然语言。每个语句都是一一个祈使句,以动词开头,表示所要做的动作。
SQL由命令组成,每个命令以分号(;)结束,例如
1.1 数字类型
有三种:字符串常量、数据常量和二进制常量
1.1.1 整型
1.1.2 浮点型
整型、浮点型、定点型
浮点型:float(M, D); double(M, D)
D表示浮点型数据小数点之后的精度,假如超过D位则四舍五入,即1.233四舍五入为1.23, 1.237四舍五入为1.24
M表示浮点型数据总共的位数,D-2则表示总共支持五位,即小数点前只支持三位数
create table test_float{
num float(5, 2)
};
-- engine = innodb charset = utf8;
insert into test_float values(1.233)
insert into test_float values(1.237)
insert into test_float values(10.233)
insert into test_float values(100.233)
insert into test_float values(1000.233)
1.1.3 定点型
定点型(金融行业)decimal
decmal在不指定M. D时默认为decmal(10,0)
create table test_decimal{
float_num float(10, 2),
double_num double(20, 2),
decimal_num decimal(20, 2)
};
insert into test_decimal values(123546565.23112, 16000000.33, 66666666.12)
insert into test_decimal values(1235465655.23112, 1600000000.33, 6665566666.12)
1.1.4 浮点型和定点型
浮点型VSdecimal
float、double类型存在精度丢失问题,即写入数据库的数据未必是插入数据库的数据
decimal无论写入数据中的数据是多少,都不会存在精度丢失问题,decimal类型常见于银行系统、互联网金融系统等对小数点后的数字比较敏感的系统中
1.2 日期类型
create table test_time{
date_value date,
time_value time,
year_value datetime,
datetime_value datetime,
timestamp_value timestamp
}
insert into test_time values(now(), now(), now(), now(), now());
1.3 字符串类型
- CHAR和VARCHAR
char是固定长度字符串,其长度范围为0~255且与编码方式无关,无论字符实际长度是多少,都会按照指定长度存储,不够的用空格补足
varchar为可变长度字符串(用的最多),在utf8编码的数据库中其长度范围为0~21844,如:1024
char实际占用的字节数即存储的字符所古用的字节数,varchar实际占用的字 节数为存储的字符+1或+2或+3
MySQL处理char类型数据时会将结尾的所有空格处理掉而varchar类型数据则不会
SQL 7 - BINARY和VARBINARY(用不到)
- BLOB和TEXT
二、SQLite 存储类
SQLite 数据类型是一个用来指定任何对象的数据类型的属性。SQLite 中的每一列,每个变量和表达式都有相关的数据类型。
可以在创建表的同时使用这些数据类型。SQLite 使用一个更普遍的动态类型系统。在 SQLite 中,值的数据类型与值本身是相关的,而不是与它的容器相关。
存储类 | 描述 |
---|---|
NULL | 值是一个 NULL 值。 |
INTEGER | 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6 或 8 字节中。 |
REAL | 值是一个浮点值,存储为 8 字节的 IEEE 浮点数字。 |
TEXT | 值是一个文本字符串,使用数据库编码(UTF-8、UTF-16BE 或 UTF-16LE)存储。 |
BLOB | 值是一个 blob 数据,完全根据它的输入存储。 |
数据类型 | 亲和类型 |
---|---|
INT、INTEGER、TINYINT、SMALLINT、MEDIUMINT、BIGINT、UNSIGNED BIG INT、INT2、INT8 | INTEGER |
CHARACTER(20)、VARCHAR(255)、VARYING CHARACTER(255)、NCHAR(55)、NATIVE CHARACTER(70)、NVARCHAR(100)、TEXT、CLOB | TEXT |
BLOB、no datatype specified | NONE |
REAL、DOUBLE、DOUBLE PRECISION、FLOAT | REAL |
NUMERIC、DECIMAL(10,5)、BOOLEAN、DATE、DATETIME | NUMERIC |
2.1 Boolean 数据类型
SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)
2.2 Date 与 Time 数据类型
存储类 | 日期格式 |
---|---|
TEXT | 格式为 “YYYY-MM-DD HH:MM:SS.SSS” 的日期。 |
REAL | 从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数。 |
INTEGER | 从 1970-01-01 00:00:00 UTC 算起的秒数。 |