sqlite 简介
sqlite是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 sql 数据库引擎。sqlite是一个增长最快的数据库引擎,这是在普及方面的增长,与它的尺寸大小无关。sqlite 源代码不受版权限制。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。
就像其他数据库,sqlite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。sqlite 直接访问其存储文件。
为什么要用 sqlite?
-
不需要一个单独的服务器进程或操作的系统(无服务器的)。
-
sqlite 不需要配置,这意味着不需要安装或管理。
-
sqlite 是自给自足的,这意味着不需要任何外部的依赖。
-
sqlite 事务是完全兼容 ACID 的,允许从多个进程或线程安全访问。
-
sqlite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API。
-
sqlite 可在 UNIX(Linux,Mac OS-X,Android,iOS)和 Windows(Win32,WinCE,WinRT)中运行。
sqlite 局限性
特性 | 描述 |
---|---|
RIGHT OUTER JOIN | 只实现了 LEFT OUTER JOIN。 |
FULL OUTER JOIN | 只实现了 LEFT OUTER JOIN。 |
ALTER TABLE | 支持 RENAME TABLE 和 ALTER TABLE 的 ADD COLUMN variants 命令,不支持 DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT。 |
Trigger 支持 | 支持 FOR EACH ROW 触发器,但不支持 FOR EACH STATEMENT 触发器。 |
VIEWs | 在 sqlite 中,视图是只读的。您不可以在视图上执行 DELETE、INSERT 或 UPDATE 语句。 |
GRANT 和 REVOKE | 可以应用的唯一的访问权限是底层操作系统的正常文件访问权限。 |
sqlite 命令
与关系数据库进行交互的标准 sqlite 命令类似于 sql。命令包括 CREATE、SELECT、INSERT、UPDATE、DELETE 和 DROP。这些命令基于它们的操作性质可分为以下几种:
DDL - 数据定义语言
命令 | 描述 |
---|---|
CREATE | 创建一个新的表,一个表的视图,或者数据库中的其他对象。 |
ALTER | 修改数据库中的某个已有的数据库对象,比如一个表。 |
DROP | 删除整个表,或者表的视图,或者数据库中的其他对象。 |
DML - 数据操作语言
命令 | 描述 |
---|---|
INSERT | 创建一条记录。 |
UPDATE | 修改记录。 |
DELETE | 删除记录。 |
DQL - 数据查询语言
命令 | 描述 |
---|---|
SELECT | 从一个或多个表中检索某些记录。 |
sqlite 安装
在 Windows 上安装 sqlite
-
请访问 SQLite 下载页面,从 Windows 区下载预编译的二进制文件。
-
您需要下载 sqlite-shell-win32-*.zip 和 sqlite-dll-win32-*.zip 压缩文件。(当前的最新版本为:sqlite-shell-win32-x86-3080803.zip和sqlite-dll-win32-x86-3080803.zip)sqlite-shell-win32-x86-3080803.zip这个是windows下sqlite的命令行管理工具,用它可以管理sqlite数据库文件。
- 同时最好把文档也下载下来,里面包含了详细的sqlite的使用说明:sqlite-doc-3080803.zip
-
创建文件夹 D:\>sqlite,并在此文件夹下解压上面两个压缩文件,将得到 sqlite3.def、sqlite3.dll 和 sqlite3.exe 文件。
sqlite 命令
如需获取可用的点命令的清单,可以在任何时候输入 ".help"。例如:
sqlite>.help
上面的命令会显示各种重要的 sqlite 点命令的列表,如下所示:
命令 | 描述 |
---|---|
.backup ?DB? FILE | 备份 DB 数据库(默认是 "main")到 FILE 文件。 |
.bail ON|OFF | 发生错误后停止。默认为 OFF。 |
.databases | 列出附加数据库的名称和文件。 |
.dump ?TABLE? | 以 sql 文本格式转储数据库。如果指定了 TABLE 表,则只转储匹配 LIKE 模式的 TABLE 表。 |
.echo ON|OFF | 开启或关闭 echo 命令。 |
.exit | 退出 sqlite 提示符。 |
.explain ON|OFF | 开启或关闭适合于 EXPLAIN 的输出模式。如果没有带参数,则为 EXPLAIN on,及开启 EXPLAIN。 |
.header(s) ON|OFF | 开启或关闭头部显示。 |
.help | 显示消息。 |
.import FILE TABLE | 导入来自 FILE 文件的数据到 TABLE 表中。 |
.indices ?TABLE? | 显示所有索引的名称。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表的索引。 |
.load FILE ?ENTRY? | 加载一个扩展库。 |
.log FILE|off | 开启或关闭日志。FILE 文件可以是 stderr(标准错误)/stdout(标准输出)。 |
.mode MODE | 设置输出模式,MODE 可以是下列之一: |
.nullvalue STRING | 在 NULL 值的地方输出 STRING 字符串。 |
.output FILENAME | 发送输出到 FILENAME 文件。 |
.output stdout | 发送输出到屏幕。 |
.print STRING... | 逐字地输出 STRING 字符串。 |
.prompt MAIN CONTINUE | 替换标准提示符。 |
.quit | 退出 sqlite 提示符。 |
.read FILENAME | 执行 FILENAME 文件中的 sql。 |
.schema ?TABLE? | 显示 CREATE 语句。如果指定了 TABLE 表,则只显示匹配 LIKE 模式的 TABLE 表。 |
.separator STRING | 改变输出模式和 .import 所使用的分隔符。 |
.show | 显示各种设置的当前值。 |
.stats ON|OFF | 开启或关闭统计。 |
.tables ?PATTERN? | 列出匹配 LIKE 模式的表的名称。 |
.timeout MS | 尝试打开锁定的表 MS 微秒。 |
.width NUM NUM | 为 "column" 模式设置列宽度。 |
.timer ON|OFF | 开启或关闭 cpu 定时器测量。 |
让我们尝试使用 .show 命令,来查看 sqlite 命令提示符的默认设置。
sqlite>.show echo: off explain: off headers: off mode: column nullvalue: "" output: stdout separator: "|" width: sqlite>
确保 sqlite> 提示符与点命令之间没有空格,否则将无法正常工作。
格式化输出
您可以使用下列的点命令来格式化输出为本教程下面所列出的格式:
sqlite>.header on sqlite>.mode column sqlite>.timer on sqlite>
上面设置将产生如下格式的输出:
ID NAME AGE ADDRESS SALARY ---------- ---------- ---------- ---------- ---------- 1 Paul 32 California 20000.0 2 Allen 25 Texas 15000.0 3 Teddy 23 Norway 20000.0 4 Mark 25 Rich-Mond 65000.0 5 David 27 Texas 85000.0 6 Kim 22 South-Hall 45000.0 7 James 24 Houston 10000.0 cpu Time: user 0.000000 sys 0.000000
sqlite_master 表格
主表中保存数据库表的关键信息,并把它命名为 sqlite_master。如要查看表概要,可按如下操作:
sqlite>.schema sqlite_master
这将产生如下结果:
CREATE TABLE sqlite_master ( type text,name text,tbl_name text,rootpage integer,sql text );
sqlite 语法
大小写敏感性
有个重要的点值得注意,sqlite 是不区分大小写的,但也有一些命令是大小写敏感的,比如 GLOB 和 glob 在 sqlite 的语句中有不同的含义。
注释
sqlite 注释是附加的注释,可以在 sqlite 代码中添加注释以增加其可读性,他们可以出现在任何空白处,包括在表达式内和其他 sql 语句的中间,但它们不能嵌套。
sql 注释以两个连续的 "-" 字符(ASCII 0x2d)开始,并扩展至下一个换行符(ASCII 0x0a)或直到输入结束,以先到者为准。
您也可以使用 C 风格的注释,以 "/*" 开始,并扩展至下一个 "*/" 字符对或直到输入结束,以先到者为准。C 庚哥的注释可以跨越多行。
sqlite>.help -- This is a single line comment
sqlite 语句
所有的 sqlite 语句可以以任何关键字开始,如 SELECT、INSERT、UPDATE、DELETE、ALTER、DROP 等,所有的语句以分号(;)结束。
sqlite ANALYZE 语句:
ANALYZE; or ANALYZE database_name; or ANALYZE database_name.table_name;
sqlite AND/OR 子句:
SELECT column1,column2....columnN FROM table_name WHERE CONDITION-1 {AND|OR} CONDITION-2;
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 BEGIN TRANSACTION 语句:
BEGIN; or BEGIN EXCLUSIVE TRANSACTION;
sqlite BETWEEN 子句:
SELECT column1,column2....columnN FROM table_name WHERE column_name BETWEEN val-1 AND val-2;
sqlite COMMIT 语句:
COMMIT;
sqlite CREATE INDEX 语句:
CREATE INDEX index_name ON table_name ( column_name COLLATE NOCASE );
sqlite CREATE UNIQUE INDEX 语句:
CREATE UNIQUE INDEX index_name ON table_name ( column1,column2,...columnN);
sqlite CREATE TABLE 语句:
CREATE TABLE table_name( column1 datatype,column2 datatype,column3 datatype,..... columnN datatype,PRIMARY KEY( one or more columns ) );
sqlite CREATE TRIGGER 语句:
CREATE TRIGGER database_name.trigger_name BEFORE INSERT ON table_name FOR EACH ROW BEGIN stmt1; stmt2; .... END;
sqlite CREATE VIEW 语句:
CREATE VIEW database_name.view_name AS SELECT statement....;
sqlite CREATE VIRTUAL TABLE 语句:
CREATE VIRTUAL TABLE database_name.table_name USING weblog( access.log ); or CREATE VIRTUAL TABLE database_name.table_name USING fts3( );
sqlite COMMIT TRANSACTION 语句:
COMMIT;
sqlite COUNT 子句:
SELECT COUNT(column_name) FROM table_name WHERE CONDITION;
sqlite DELETE 语句:
DELETE FROM table_name WHERE {CONDITION};
sqlite DETACH DATABASE 语句:
DETACH DATABASE 'Alias-Name';
sqlite DISTINCT 子句:
SELECT DISTINCT column1,column2....columnN FROM table_name;
sqlite DROP INDEX 语句:
DROP INDEX database_name.index_name;
sqlite DROP TABLE 语句:
DROP TABLE database_name.table_name;
sqlite DROP VIEW 语句:
DROP INDEX database_name.view_name;
sqlite DROP TRIGGER 语句:
DROP INDEX database_name.trigger_name;
sqlite EXISTS 子句:
SELECT column1,column2....columnN FROM table_name WHERE column_name EXISTS (SELECT * FROM table_name );
sqlite EXPLAIN 语句:
EXPLAIN INSERT statement...; or EXPLAIN QUERY PLAN SELECT statement...;
sqlite GLOB 子句:
SELECT column1,column2....columnN FROM table_name WHERE column_name GLOB { PATTERN };
sqlite GROUP BY 子句:
SELECT SUM(column_name) FROM table_name WHERE CONDITION GROUP 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-N);
sqlite ORDER BY 子句:
SELECT column1,column2....columnN FROM table_name WHERE CONDITION ORDER BY column_name {ASC|DESC};
sqlite PRAGMA 语句:
PRAGMA pragma_name; For example: PRAGMA page_size; PRAGMA cache_size = 1024; PRAGMA table_info(table_name);
sqlite RELEASE SAVEPOINT 语句:
RELEASE savepoint_name;
sqlite REINDEX 语句:
REINDEX collation_name; REINDEX database_name.index_name; REINDEX database_name.table_name;
sqlite ROLLBACK 语句:
ROLLBACK; or ROLLBACK TO SAVEPOINT savepoint_name;
sqlite SAVEPOINT 语句:
SAVEPOINT savepoint_name;
sqlite SELECT 语句:
SELECT column1,column2....columnN FROM table_name;
sqlite UPDATE 语句:
UPDATE table_name SET column1 = value1,column2 = value2....columnN=valueN [ WHERE CONDITION ];
sqlite VACUUM 语句:
VACUUM;
sqlite WHERE 子句:
SELECT column1,column2....columnN FROM table_name WHERE CONDITION;原文链接:https://www.f2er.com/sqlite/199812.html