作为 Write for DOnations 计划的一部分,作者选择了 Free and Open Source Fund 来接受捐赠。
介绍
SQLite 是一个免费的跨平台数据库管理系统。 它因其效率和与许多不同编程语言交互的能力而广受欢迎。
在本教程中,您将在 Ubuntu 20.04 上安装 SQLite。 然后,您将创建一个数据库、从中读取数据、插入项目、删除项目以及从单独的表中连接项目。
注意: 本教程包括安装和使用 SQLite 的实用说明。 它不涵盖更大的概念问题和生产问题,例如何时应该或不应该考虑使用 SQLite 数据库。 有关流行的关系数据库及其比较方式的出色概述,请查看我们的文章 SQLite vs MySQL vs PostgreSQL:关系数据库管理系统的比较 。
此外,许多语言保持与 SQLite 的集成。 有关在 Python 代码中使用 SQLite 的说明,请查看我们的教程 如何在 Python 3 中使用 sqlite3 模块。
先决条件
要完成本教程,您需要:
- 运行 Ubuntu 20.04 的本地机器或服务器。 要设置服务器,包括非 root sudo 用户和防火墙,您可以 创建一个运行 Ubuntu 20.04 的 DigitalOcean Droplet,然后按照我们的 初始服务器设置指南 。
第 1 步 — 在 Ubuntu 20.04 上安装 SQLite
要在 Ubuntu 上安装 SQLite 命令行界面,首先更新你的包列表:
sudo apt update
现在安装 SQLite:
sudo apt install sqlite3
要验证安装,请检查软件的版本:
sqlite3 --version
您将收到如下输出:
Output3.31.1 2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837balt1
安装 SQLite 后,您现在可以创建新数据库了。
第 2 步 — 创建 SQLite 数据库
在这一步中,您将创建一个包含不同鲨鱼及其属性的数据库。 要创建数据库,请打开终端并运行以下 sqlite3
命令:
sqlite3 sharks.db
这将创建一个名为 sharks
的新数据库。 如果文件 sharks.db
已经存在,SQLite 将打开到它的连接; 如果它不存在,SQLite 将创建它。
您将收到如下输出:
OutputSQLite version 3.31.1 2020-01-27 19:55:54 Enter ".help" for usage hints.
在此之后,您的提示将发生变化。 现在出现了一个新前缀 sqlite>
:
如果文件 sharks.db
不存在,并且如果您退出 sqlite
升级而不运行任何查询,则不会创建文件 sharks.db
。 为了确保文件被创建,您可以通过键入 ;
然后按“Enter”来运行一个空查询。 这样,您将确保实际创建了数据库文件。
创建 Shark 数据库后,您现在将创建一个新表并用数据填充它。
第三步——创建一个 SQLite 表
SQLite 数据库被组织成表。 表存储信息。 为了更好地可视化表格,可以想象行和列。
本教程的其余部分将遵循输入 SQLite 命令的通用约定。 SQLite 命令是大写的,用户信息是小写的。 行 必须 以分号结尾。
现在让我们为各种数据创建一个表和一些列:
- 身份证
- 鲨鱼的名字
- 鲨鱼的类型
- 鲨鱼的平均长度(厘米)
使用以下命令创建表:
CREATE TABLE sharks(id integer NOT NULL, name text NOT NULL, sharktype text NOT NULL, length integer NOT NULL);
使用 NOT NULL
使该字段成为必填字段。 我们将在下一节更详细地讨论 NOT NULL
。
创建表后,将返回一个空提示。 现在让我们在其中插入一些值。
将值插入表中
在 SQLite 中,向表中插入值的命令遵循以下一般形式:
INSERT INTO tablename VALUES(values go here);
其中 tablename
是表的名称,而 values
放在括号内。
现在将三行 VALUES
插入 sharks
表中:
INSERT INTO sharks VALUES (1, "Sammy", "Greenland Shark", 427); INSERT INTO sharks VALUES (2, "Alyoshka", "Great White Shark", 600); INSERT INTO sharks VALUES (3, "Himari", "Megaladon", 1800);
因为您之前为表中的每个变量指定了 NOT NULL
,所以您必须为每个变量输入一个值。
例如,尝试在不设置长度的情况下添加另一条鲨鱼:
INSERT INTO sharks VALUES (4, "Faiza", "Hammerhead Shark");
您将收到此错误:
OutputError: table sharks has 4 columns but 3 values were supplied
在此步骤中,您创建了一个表并将值插入其中。 在下一步中,您将从数据库表中读取。
第 4 步 — 在 SQLite 中读取表
在这一步中,我们将重点介绍从表中读取数据的最基本方法。 认识到 SQLite 提供了更具体的方法来查看表中的数据。
要查看包含所有插入值的表,请使用 SELECT
:
SELECT * FROM sharks;
您将看到先前插入的条目:
Output1|Sammy|Greenland Shark|427 2|Alyoshka|Great White Shark|600 3|Himari|Megaladon|1800
要根据其 id
(我们手动设置的值)查看条目,请将 WHERE
命令添加到您的查询中:
SELECT * FROM sharks WHERE id IS 1;
这将返回 id
等于 1
的鲨鱼:
Output1|Sammy|Greenland Shark|427
让我们仔细看看这个命令。
- 首先,我们从数据库
sharks
中SELECT
所有 (*
) 值。 - 然后我们查看所有
id
值。 - 然后我们返回
id
等于1
的所有表条目。
到目前为止,您已经创建了一个表,将数据插入其中,并查询了保存的数据。 现在您将更新现有表。
第 5 步 — 在 SQLite 中更新表
在以下两节中,您将首先在现有表中添加一个新列,然后更新表中的现有值。
向 SQLite 表添加列
SQLite 允许您使用 ALTER TABLE
命令更改表。 这意味着您可以创建新的行和列,或修改现有的行和列。
使用 ALTER TABLE
创建一个新列。 这个新列将跟踪每条鲨鱼的年龄(以年为单位):
ALTER TABLE sharks ADD COLUMN age integer;
您现在有第五列,age
。
更新 SQLite 表中的值
使用 UPDATE
命令,为每个鲨鱼添加新的 age
值:
UPDATE sharks SET age = 272 WHERE id=1; UPDATE sharks SET age = 70 WHERE id=2; UPDATE sharks SET age = 40 WHERE id=3;
Output1|Sammy|Greenland Shark|427|272 2|Alyoshka|Great White Shark|600|70 3|Himari|Megaladon|1800|40
在此步骤中,您更改了表格的组成,然后更新了表格中的值。 在下一步中,您将从表中删除信息。
第 6 步 — 删除 SQLite 中的信息
在此步骤中,您将根据参数的评估删除表中的条目。
在以下命令中,您将查询数据库并请求它删除 sharks
表中年龄小于 200 的所有鲨鱼:
DELETE FROM sharks WHERE age <= 200;
键入 SELECT * FROM sharks;
将验证 Alyoshka
和 Himari
都已被删除,它们的年龄都小于 200 年。 只有 Sammy
格陵兰鲨鱼仍然存在:
Output1|Sammy|Greenland Shark|427|272
第 7 步 — 在 SQLite 中加入信息
假设我们有两个表:我们当前的 sharks
表和一个 endangered
表。 现在,如果 endangered
表有一个 id
值映射到 sharks
表中的 id
,并且它也有一个 [ X132X] 值表明每条鲨鱼的保护状态?
如果你想从两个表中查询数据,你可以使用 SQLite 的四个连接命令之一:
INNER JOIN
OUTER JOIN
LEFT JOIN
CROSS JOIN
让我们创建第二个表,然后使用 INNER JOIN
连接一些数据。
首先,创建您的 endangered
表:
CREATE TABLE endangered (id integer NOT NULL, status text NOT NULL); INSERT INTO endangered VALUES (1, "near threatened");
现在加入你的桌子:
SELECT * FROM sharks INNER JOIN endangered on sharks.id = endangered.id;
您的输出将如下所示:
Output1|Sammy|Greenland Shark|427|272|1|near threatened
请注意,输出还包括来自 endangered
的 id
值。 您可以使用更明确的命令指定所需的输出:
SELECT sharks.id, sharks.name, sharks.sharktype, sharks.length, sharks.age, endangered.status FROM sharks INNER JOIN endangered on sharks.id = endangered.id;
这次输出不包括第二个 id
值:
Output1|Sammy|Greenland Shark|427|272|near threatened
您现在已成功连接来自多个表的信息。
结论
SQLite 是一个有用的数据库管理工具。 可以快速创建数据库并使用各种命令对其进行操作。 学习本教程后,您现在对 SQLite 有了基本的了解,并准备深入研究这个数据库管理系统。
有关关系数据库系统及其比较方式的出色概述,请查看我们的文章 SQLite vs MySQL vs PostgreSQL:关系数据库管理系统的比较 。
此外,许多语言保持与 SQLite 的集成。 有关在 Python 代码中使用 SQLite 的说明,请查看我们的教程 如何在 Python 3 中使用 sqlite3 模块。
有关 SQLite 语法的具体帮助,官方文档是另一个很好的资源。