作为Write for DOnations计划的一部分,作者选择了免费和开源基金来接受捐赠。
介绍
SQLite是一个免费的跨平台数据库管理系统。它因其效率和与许多不同编程语言接口的能力而广受欢迎。
在本教程中,您将在 Ubuntu 20.04 上安装 SQLite。然后,您将创建一个数据库、从中读取数据、插入项目、删除项目以及从单独的表中连接项目。
注意:本教程包括安装和使用 SQLite 的实用说明。它不涉及更大的概念问题和生产问题,例如何时应该或不应该考虑使用 SQLite 数据库。有关流行的关系数据库及其比较方式的出色概述,请查看我们的文章SQLite 与 MySQL 与 PostgreSQL:关系数据库管理系统的比较。
此外,许多语言保持与 SQLite 的集成。有关在 Python 代码中使用 SQLite 的说明,请查看我们的教程,如何sqlite3
在 Python 3 中使用模块。
先决条件
要完成本教程,您需要:
- 运行 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 数据库后,您现在将创建一个新表并用数据填充它。
第 3 步 – 创建 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
让我们仔细看看这个命令。
- 首先,我们
SELECT
所有 (*
) 值来自我们的数据库,sharks
. - 然后我们查看所有
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
映射到表中id
s的值sharks
,并且它也有一个status
表示每条鲨鱼的保护状态的值呢?
如果您想从两个表中查询数据,您可以使用 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
请注意,输出还包括id
来自的值endangered
。您可以使用更明确的命令指定所需的输出:
- 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 的说明,请查看我们的教程,如何sqlite3
在 Python 3 中使用模块。
对于 SQLite 语法的具体帮助,官方文档是另一个很好的资源。