您当前的位置:首页 > 电脑百科 > 数据库 > 百科

SQLite3 实践教程

时间:2021-03-01 12:04:31  来源:  作者:
SQLite3 实践教程

应用程序经常需要保存数据。无论你的用户是创建简单的文本文档、复杂的图形布局、游戏进度还是错综复杂的客户和订单号列表,软件通常都意味着生成数据。有很多方法可以存储数据以供重复使用。你可以将文本转储为 INI、YAML、XML 或 JSON 等配置格式,可以输出原始的二进制数据,也可以将数据存储在结构化数据库中。SQLite 是一个自包含的、轻量级数据库,可轻松创建、解析、查询、修改和传输数据。

  • 下载 SQLite3 备忘录

SQLite 专用于 公共领域,ublicDomain">从技术上讲,这意味着它没有版权,因此不需要许可证。如果你需要许可证,则可以购买所有权担保。SQLite 非常常见,大约有 1 万亿个 SQLite 数据库正在使用中。在每个基于 Webkit 的 Web 浏览器,现代电视机,汽车多媒体系统以及无数其他软件应用程序中,AndroidIOS 设备, macOS 和 windows 10 计算机,大多数 linux 系统上都包含多个这种数据库。

总而言之,它是用于存储和组织数据的一个可靠而简单的系统。

 

安装

你的系统上可能已经有 SQLite 库,但是你需要安装其命令行工具才能直接使用它。在 Linux上,你可能已经安装了这些工具。该工具提供的命令是 sqlite3(而不仅仅是 sqlite)。

如果没有在你的 Linux 或 BSD 上安装 SQLite,你则可以从软件仓库中或 ports 树中安装 SQLite,也可以从源代码或已编译的二进制文件进行下载并安装。

在 macOS 或 Windows 上,你可以从 sqlite.org下载并安装 SQLite 工具。

 

使用 SQLite

通过编程语言与数据库进行交互是很常见的。因此,像 JAVAPython、Lua、php、Ruby、C++ 以及其他编程语言都提供了 SQLite 的接口(或“绑定”)。但是,在使用这些库之前,了解数据库引擎的实际情况以及为什么你对数据库的选择很重要是有帮助的。本文向你介绍 SQLite 和 sqlite3命令,以便你熟悉该数据库如何处理数据的基础知识。

 

与 SQLite 交互

你可以使用 sqlite3命令与 SQLite 进行交互。 该命令提供了一个交互式的 shell 程序,以便你可以查看和更新数据库。

$ sqlite3
SQLite version 3.34.0 2020-12-01 16:14:00
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>

该命令将你使你处于 SQLite 的子 shell 中,因此现在的提示符是 SQLite 的提示符。你以前使用的 Bash 命令在这里将不再适用。你必须使用 SQLite 命令。要查看 SQLite 命令列表,请输入 .help

sqlite> .help
.archive ...             Manage SQL archives
.auth ON|OFF             SHOW authorizer callbacks
.backup ?DB? FILE        Backup DB (DEFAULT "main") TO FILE
.bail ON|off             Stop after hitting an error.  DEFAULT OFF
.binary ON|off           Turn BINARY output ON OR off.  DEFAULT OFF
.cd DIRECTORY            CHANGE the working directory TO DIRECTORY
[...]

这些命令中的其中一些是二进制的,而其他一些则需要唯一的参数(如文件名、路径等)。这些是 SQLite Shell 的管理命令,不是用于数据库查询。数据库以结构化查询语言(SQL)进行查询,许多 SQLite 查询与你从 MySQL和MariaDB数据库中已经知道的查询相同。但是,数据类型和函数有所不同,因此,如果你熟悉另一个数据库,请特别注意细微的差异。

 

创建数据库

启动 SQLite 时,可以打开内存数据库,也可以选择要打开的数据库:

$ sqlite3 mydatabase.db

如果还没有数据库,则可以在 SQLite 提示符下创建一个数据库:

sqlite> .open mydatabase.db

现在,你的硬盘驱动器上有一个空文件,可以用作 SQLite 数据库。 文件扩展名 .db是任意的。你也可以使用.sqlite或任何你想要的后缀。

 

创建一个表

数据库包含一些表table,可以将其可视化为电子表格。有许多的行(在数据库中称为记录record)和列。行和列的交集称为字段field。

结构化查询语言(SQL)以其提供的内容而命名:一种以可预测且一致的语法查询数据库内容以接收有用的结果的方法。SQL 读起来很像普通的英语句子,即使有点机械化。当前,你的数据库是一个没有任何表的空数据库。

你可以使用 CREATE来创建一个新表,你可以和IF NOT EXISTS结合使用。以便不会破坏现在已有的同名的表。

你无法在 SQLite 中创建一个没有任何字段的空表,因此在尝试 CREATE语句之前,必须考虑预期表将存储的数据类型。在此示例中,我将使用以下列创建一个名为member的表:

  • 唯一标识符
  • 人名
  • 记录创建的时间和日期

 

唯一标识符

最好用唯一的编号来引用记录,幸运的是,SQLite 认识到这一点,创建一个名叫 rowid的列来为你自动实现这一点。

无需 SQL 语句即可创建此字段。

 

数据类型

对于我的示例表中,我正在创建一个 name列来保存TEXT类型的数据。为了防止在没有指定字段数据的情况下创建记录,可以添加NOT NULL指令。

用 name TEXT NOT NULL语句来创建。

SQLite 中有五种数据类型(实际上是 储存类别):

  • TEXT:文本字符串
  • INTEGER:一个数字
  • REAL:一个浮点数(小数位数无限制)
  • BLOB:二进制数据(例如,.jpeg 或 .webp 图像)
  • NULL:空值

 

日期和时间戳

SQLite 有一个方便的日期和时间戳功能。它本身不是数据类型,而是 SQLite 中的一个函数,它根据所需的格式生成字符串或整数。 在此示例中,我将其保留为默认值。

创建此字段的 SQL 语句是:datestamp DATETIME DEFAULT CURRENT_TIMESTAMP

 

创建表的语句

在 SQLite 中创建此示例表的完整 SQL:

sqlite> CREATE TABLE
...> IF NOT EXISTS
...> member (name TEXT NOT NULL,
...> datestamp DATETIME DEFAULT CURRENT_TIMESTAMP);

在此代码示例中,我在语句的分句后按了回车键。以使其更易于阅读。除非以分号(;)终止,否则 SQLite 不会运行你的 SQL 语句。

你可以使用 SQLite 命令 .tables验证表是否已创建:

sqlite> .tables
member

 

查看表中的所有列

你可以使用 PRAGMA语句验证表包含哪些列和行:

sqlite> PRAGMA table_info(member);
0|name|TEXT|1||0
1|datestamp|DATETIME|0|CURRENT_TIMESTAMP|0

 

数据输入

你可以使用 INSERT语句将一些示例数据填充到表中:

> INSERT INTO member (name) VALUES ('Alice');
> INSERT INTO member (name) VALUES ('Bob');
> INSERT INTO member (name) VALUES ('Carol');
> INSERT INTO member (name) VALUES ('David');

查看表中的数据:

> SELECT * FROM member;
Alice|2020-12-15 22:39:00
Bob|2020-12-15 22:39:02
Carol|2020-12-15 22:39:05
David|2020-12-15 22:39:07

 

添加多行数据

现在创建第二个表:

> CREATE TABLE IF NOT EXISTS linux (
...> distro TEXT NOT NULL);

填充一些示例数据,这一次使用小的 VALUES快捷方式,因此你可以在一个命令中添加多行。关键字VALUES期望以括号形式列出列表,而用多个逗号分隔多个列表:

> INSERT INTO linux (distro)
...> VALUES ('Slackware'), ('RHEL'),
...> ('Fedora'),('Debian');

 

修改表结构

你现在有两个表,但是到目前为止,两者之间没有任何关系。它们每个都包含独立的数据,但是可能你可能需要将第一个表的成员与第二个表中列出的特定项相关联。

为此,你可以为第一个表创建一个新列,该列对应于第二个表。由于两个表都设计有唯一标识符(这要归功于 SQLite 的自动创建),所以连接它们的最简单方法是将其中一个的 rowid字段用作另一个的选择器。

在第一个表中创建一个新列,以存储第二个表中的值:

> ALTER TABLE member ADD os INT;

使用 linux表中的唯一标识符作为member表中每一条记录中os字段的值。因为记录已经存在。因此你可以使用UPDATE语句而不是使用INSERT语句来更新数据。需要特别注意的是,你首先需要选中特定的一行来然后才能更新其中的某个字段。从句法上讲,这有点相反,更新首先发生,选择匹配最后发生:

> UPDATE member SET os=1 WHERE name='Alice';

对 member表中的其他行重复相同的过程。更新os字段,为了数据多样性,在四行记录上分配三种不同的发行版(其中一种加倍)。

 

联接表

现在,这两个表相互关联,你可以使用 SQL 显示关联的数据。数据库中有多种 联接方式,但是一旦掌握了基础知识,就可以尝试所有的联接形式。这是一个基本联接,用于将member表的os字段中的值与 linux 表的rowid字段相关联:

> SELECT * FROM member INNER JOIN linux ON member.os=linux.rowid;
Alice|2020-12-15 22:39:00|1|Slackware
Bob|2020-12-15 22:39:02|3|Fedora
Carol|2020-12-15 22:39:05|3|Fedora
David|2020-12-15 22:39:07|4|Debian

osrowid字段形成了关联。

在一个图形应用程序中,你可以想象 os字段是一个下拉选项菜单,其中的值是linux表中distro字段中的数据。将相关的数据集通过唯一的字段相关联,可以确保数据的一致性和有效性,并且借助 SQL,你可以在以后动态地关联它们。

 

了解更多

SQLite 是一个非常有用的自包含的、可移植的开源数据库。学习以交互方式使用它是迈向针对 Web 应用程序进行管理或通过编程语言库使用它的重要的第一步。

如果你喜欢 SQLite,也可以尝试由同一位作者 Richard Hipp 博士的 Fossil。

在学习和使用 SQLite 时,有一些常用命令可能会有所帮助,所以请立即下载我们的 SQLite3 备忘单!

via: https://opensource.com/article/21/2/sqlite3-cheat-sheet

作者:Klaatu选题:lujun9972译者:amwps290校对:wxy

本文由 LCTT原创编译,Linux中国荣誉推出



Tags:SQLite   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
读取SQLite数据库,就是读取一个路径\\192.168.100.**\position\db.sqlite下的文件<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/...【详细内容】
2021-12-16  Tags: SQLite  点击:(21)  评论:(0)  加入收藏
概述“最新版GDAL源码下载 ”一文中,我们为大家分享了最新版本的GDAL源码,而GDAL是需要依赖PROJ投影转换库的。因此,在最新版投影转换工具PROJ源码 ”一文中,我们又为大家分享了...【详细内容】
2021-04-20  Tags: SQLite  点击:(258)  评论:(0)  加入收藏
应用程序经常需要保存数据。无论你的用户是创建简单的文本文档、复杂的图形布局、游戏进度还是错综复杂的客户和订单号列表,软件通常都意味着生成数据。有很多方法可以存储数...【详细内容】
2021-03-01  Tags: SQLite  点击:(161)  评论:(0)  加入收藏
SQLite是一个轻型的数据库,无需任何服务,无需任何配置的绿色数据库。SQLite是一个进程内库,它实现了一个自包含、无服务器、零配置、事务性SQL数据库引擎。SQLite的代码在公共...【详细内容】
2020-11-09  Tags: SQLite  点击:(252)  评论:(0)  加入收藏
SQLite是一个非常受欢迎的数据库,在数据库排行榜中已经进入前十的行列。这主要是因为该数据库非常小巧,而且可以支持Linux、Windows、iOS和Andriod的主流的操作系统。 SQLite...【详细内容】
2020-09-25  Tags: SQLite  点击:(91)  评论:(0)  加入收藏
Linux是一款免费开源的操作系统,由于其自由、开放、安全、稳定等诸多特点,已被各大IT公司广泛地应用于服务器和嵌入式设备中。由于数据存储的需要,Linux操作系统需要搭配一套性...【详细内容】
2020-09-03  Tags: SQLite  点击:(85)  评论:(0)  加入收藏
如果你是软件开发人员,相信你一定知道或者曾经使用过一个非常轻量级的数据库&mdash;&mdash;SQLite。它具有作为关系数据库所需的几乎所有功能,但是这个数据库把所有功能都保存...【详细内容】
2020-08-04  Tags: SQLite  点击:(68)  评论:(0)  加入收藏
SQLite数据库通常存储在单个普通磁盘文件中。但是,在某些情况下,数据库可能存储在内存中。 强制SQLite数据库单纯的存在于内存中的最常用方法是使用特殊文件名“ :memory: ” 打...【详细内容】
2019-12-09  Tags: SQLite  点击:(238)  评论:(0)  加入收藏
1.概述SQLite支持三种不同的线程模式: 单线程。在此模式下,所有互斥锁都被禁用,并且SQLite一个链接不能在多个线程中使用。 多线程。在这种模式下,只要在两个或多个线程中不同时...【详细内容】
2019-12-09  Tags: SQLite  点击:(76)  评论:(0)  加入收藏
▌简易百科推荐
1增1.1【插入单行】insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) values (&#39;开心朋朋&#39;,&#39;男&#39;,&#39;1980/6/15&#3...【详细内容】
2021-12-27  快乐火车9d3    Tags:SQL   点击:(1)  评论:(0)  加入收藏
最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫, 不知道各种写法孰优孰劣,该选用哪种写法,以及各种写法的优缺点,本文以一个简单的查询...【详细内容】
2021-12-23  linux上的码农    Tags:sql   点击:(9)  评论:(0)  加入收藏
《开源精选》是我们分享Github、Gitee等开源社区中优质项目的栏目,包括技术、学习、实用与各种有趣的内容。本期推荐的HasorDB 是一个全功能数据库访问工具,提供对象映射、丰...【详细内容】
2021-12-22  GitHub精选    Tags:HasorDB   点击:(5)  评论:(0)  加入收藏
作者丨Rafal Grzegorczyk译者丨陈骏策划丨孙淑娟【51CTO.com原创稿件】您是否还在手动对数据库执行各种脚本?您是否还在浪费时间去验证数据库脚本的正确性?您是否还需要将...【详细内容】
2021-12-22    51CTO  Tags:Liquibase   点击:(3)  评论:(0)  加入收藏
场景描述:由于生产环境的表比较复杂,字段很多。这里我们做下简化,只为说明今天要聊的问题。有两张表 tab1,tab2: tab1 数据如下: tab2 数据如下: 然后给你看下,我用来统计 name=&#3...【详细内容】
2021-12-20  Bald    Tags:SQL   点击:(5)  评论:(0)  加入收藏
前言知识无底,学海无涯,知识点虽然简单,但是比较多,所以将MySQL的基础写出来,方便自己以后查找,还有就是分享给大家。一、SQL简述1.SQL的概述Structure Query Language(结构化查...【详细内容】
2021-12-16  谣言止于独立思考    Tags:SQL基础   点击:(13)  评论:(0)  加入收藏
前言作为一名测试工程师,工作中在对测试结果进行数据比对的时候,或多或少要和数据库打交道的,要和数据库打交道,那么一些常用的 SQL 查询语法必须要掌握。最近有部分做测试小伙...【详细内容】
2021-12-14  柠檬班软件测试    Tags:SQL   点击:(15)  评论:(0)  加入收藏
话说C是面向内存的编程语言。数据要能存得进去,取得出来,且要考虑效率。不管是顺序存储还是链式存储,其寻址方式总是很重要。顺序存储是连续存储。同质结构的数组通过其索引表...【详细内容】
2021-12-08  小智雅汇    Tags:数据存储   点击:(17)  评论:(0)  加入收藏
概述DBConvert Studio 是一款强大的跨数据库迁移和同步软件,可在不同数据库格式之间转换数据库结构和数据。它将成熟、稳定、久经考验的 DBConvert 和 DBSync 核心与改进的现...【详细内容】
2021-11-17  雪竹聊运维    Tags:数据库   点击:(26)  评论:(0)  加入收藏
一、前言 大家好,我是小诚,《从0到1-全面深刻理解MySQL系列》已经来到第四章,这一章节的主要从一条SQL执行的开始,由浅入深的解析SQL语句由客户端到服务器的完整执行流程,最...【详细内容】
2021-11-09  woaker    Tags:SQL   点击:(35)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条