SQLite 简介
本教程帮助您了解什么是 SQLite,它与 SQL 之间的不同,为什么需要它,以及它的应用程序数据库处理方式。
SQLite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。SQLite 源代码不受版权限制。
什么是 SQLite?
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。
就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
为什么要用 SQLite?
不需要一个单独的服务器进程或操作的系统(无服务器的)。
SQLite 不需要配置,这意味着不需要安装或管理。
一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件。
SQLite 是非常小的,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB。
SQLite 是自给自足的,这意味着不需要任何外部的依赖。
SQLite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
SQLite 支持 SQL92(SQL2)标准的大多数查询语言的功能。
SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。
SQLite 命令
与关系数据库进行交互的标准 SQLite 命令类似于 SQL。命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE 和 DROP。这些命令基于它们的操作性质可分为以下几种:
DDL – 数据定义语言
|命令 |描述
| ————- |:————-:| —–:|
|CREATE |创建一个新的表,一个表的视图,或者数据库中的其他对象。
|ALTER |修改数据库中的某个已有的数据库对象,比如一个表。
|DROP |删除整个表,或者表的视图,或者数据库中的其他对象。
DML – 数据操作语言
|命令 |描述
| ——–|
|INSERT |创建一条记录。
|UPDATE| 修改记录。
|DELETE| 删除记录。
DQL – 数据查询语言
|命令 |描述
| —-|
|SELECT| 从一个或多个表中检索某些记录。
SQLite 语法
SQLite 是遵循一套独特的称为语法的规则和准则。本教程列出了所有基本的 SQLite 语法,向您提供了一个 SQLite 快速入门。
大小写敏感性
有个重要的点值得注意,SQLite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 SQLite 的语句中有不同的含义。
注释
SQLite 注释是附加的注释,可以在 SQLite 代码中添加注释以增加其可读性,他们可以出现在任何空白处,包括在表达式内和其他 SQL 语句的中间,但它们不能嵌套。
SQL 注释以两个连续的 “-” 字符(ASCII 0x2d)开始,并扩展至下一个换行符(ASCII 0x0a)或直到输入结束,以先到者为准。
您也可以使用 C 风格的注释,以 “/” 开始,并扩展至下一个 “/” 字符对或直到输入结束,以先到者为准。SQLite的注释可以跨越多行。
sqlite>.help — This is a single line comment
SQLite 语句
所有的 SQLite 语句可以以任何关键字开始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的语句以分号(;)结束。
SQLite CREATE TABLE 语句:
CREATE TABLE table_name(
column1 datatype,
column2 datatype,
column3 datatype,
….. columnN datatype,
PRIMARY KEY( one or more columns ));
SQLite DROP TABLE 语句:
DROP TABLE database_name.table_name;
SQLite DELETE 语句:
DELETE FROM table_name
WHERE {CONDITION};
SQLite ALTER TABLE 语句:
ALTER TABLE table_name ADD COLUMN column_def…;
SQLite ALTER TABLE 语句(Rename):
ALTER TABLE table_name RENAME TO new_table_name;
SQLite ATTACH DATABASE 语句:
ATTACH DATABASE ‘DatabaseName’ As ‘Alias-Name’;
SQLite EXISTS 子句:
SELECT column1, column2….columnN
FROM table_name
WHERE column_name EXISTS (SELECT * FROM table_name );
SQLite BETWEEN 子句:
SELECT column1, column2….columnN
FROM table_name
WHERE column_name BETWEEN val-1 AND val-2;
SQLite AND/OR 子句:
SELECT column1, column2….columnN
FROM table_name
WHERE CONDITION-1 {AND|OR} CONDITION-2;
SQLite COUNT 子句:
SELECT COUNT(column_name)
FROM table_name
WHERE CONDITION;
SQLite GROUP BY 子句:
SELECT SUM(column_name)
FROM table_name
WHERE CONDITIONGROUP BY column_name;
SQLite HAVING 子句:
SELECT SUM(column_name)
FROM table_name
WHERE CONDITION
GROUP BY column_name
HAVING (arithematic function condition);
SQLite INSERT INTO 语句:
INSERT INTO table_name( column1, column2….columnN)
VALUES ( value1, value2….valueN);
SQLite IN 子句:
SELECT column1, column2….columnN
FROM table_name
WHERE column_name IN (val-1, val-2,…val-N);
SQLite Like 子句:
SELECT column1, column2….columnN
FROM table_name
WHERE column_name LIKE { PATTERN };
SQLite NOT IN 子句:
SELECT column1, column2….columnN
FROM table_name
WHERE column_name NOT IN (val-1, val-2,…val-N);
SQLite ORDER BY 子句:
SELECT column1, column2….columnN
FROM table_name
WHERE CONDITIONORDER BY column_name {ASC|DESC};
SQLite SELECT 语句:
SELECT column1, column2….columnN
FROM table_name;
SQLite UPDATE 语句:
UPDATE table_name
SET column1 = value1, column2 = value2….columnN=valueN
[ WHERE CONDITION ];
SQLite WHERE 子句:
SELECT column1, column2….columnN
FROM table_name
WHERE CONDITION;
SQLite 数据类型
SQLite 数据类型是一个用来指定任何对象的数据类型的属性。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 数据,完全根据它的输入存储。|
SQLite 的存储类稍微比数据类型更普遍。INTEGER 存储类,例如,包含 6 种不同的不同长度的整数数据类型。
Boolean 数据类型
SQLite 没有单独的 Boolean 存储类。相反,布尔值被存储为整数 0(false)和 1(true)。
Date 与 Time 数据类型
SQLite 没有一个单独的用于存储日期和/或时间的存储类,但 SQLite 能够把日期和时间存储为 TEXT、REAL 或 INTEGER 值。
|存储类| 日期格式|
| ——|
|TEXT |格式为 “YYYY-MM-DD HH:MM:SS.SSS” 的日期。|
|REAL |从公元前 4714 年 11 月 24 日格林尼治时间的正午开始算起的天数。|
|INTEGER |从 1970-01-01 00:00:00 UTC 算起的秒数。|
您可以以任何上述格式来存储日期和时间,并且可以使用内置的日期和时间函数来自由转换不同格式。