前言
因为 MacOS 已经安装好了SQLite3,所以笔者就不需要安装。
SQLite 点命令
首先我们要了解的是非常重要的点命令,这些命令的不同之处在于它们不以分号结束。
如果需要查看可用的点命令清单,可以在任何时候输入 .help
来获取。
SQLite 语法
大小写敏感性
首先需要注意的是,SQLite不区分大小写,但是有一些明明是大小写敏感的,比如GLOB和glob。
注释
SQL注释可以出现在任何空白处,摆阔表达式内和其他SQL语句中间,但是它们不能嵌套。
注释有两种:
- 连续的两个
-
开始的到换行符结束的注释 - 以
/*
开始*/
结束的多行注释
SQLite语句
所有的SQLite语句可以从任何关键字开始,比如 SELECT
,INSERT
等,所有的语句以 ;
结束。
SQLite 数据类型
存储类
SQLite中共有五个存储类,这是比数据类型更大的概念
存储类 | 描述 |
---|---|
NULL | 值是一个 NULL 值 |
INTRGER | 值是一个带符号的整数,根据值的大小存储在 1、2、3、4、6或8字节中 |
REAL | 值是一个浮点数,存储8字节的IEEE浮点数字 |
TEXT | 值时一个文本字符串,使用数据库编码(UTF-8、UTF-16BE、UTF-16LE)存储 |
BLOB | 值是一个blob数据,完全根据它的输入存储 |
亲和类型
接下来介绍一下亲和类型,也就是每一列优先使用某一类型来作为该值的存储方式,目前有五种
亲和类型 | 描述 |
---|---|
TEXT | 先转换为文本格式 |
NUMERIC | 如果转换不会导致信息丢失并且完全可逆,那么会把文本数据转换为INTEGER或REAL类型,否则以TEXT存储;对于NULL活着BLOB,不做任何转换。尽量选择INTEGER |
INTEGER | 规则基本等同NUMERIC,不过执行CAST表达式会有区别 |
REAL | 规则基本等同NUMERIC,不过只会转换为REAL |
BLOB(NULL) | (这个类型经过改名,所以两个名字都可能)不做任何转换 |
数据类型
只列举一些
数据类型 | 亲和类型 |
---|---|
INT, INTEGER, TINYINT, BIGINT, INT2 | INTEGER |
CHARACTER(20), TEXT, CLOB | TEXT |
BLOB, 未指定类型 | BLOB |
REAL, DOUBLE, FLOAT | REAL |
NUMERIC, BOOLEAN, DATE, DATETIME | NUMERIC |
其中BOOLEAN会被存为整数 0 / 1
DATE / TIME 数据类型则会存为TEXT、REAL、INTEGER值
数据类型 | 日期格式 |
---|---|
TEXT | 格式为 "YYYY-MM-DD HH:MM:SS.SSS" |
REAL | 从公元前4714年11月24日的格林尼治的正午开始算的天数 |
INTEGER | 从 1970-01-01 00:00:00 UTC 算起的秒数 |