如何和何时使用 Sqlite

简介: 如何和何时使用 Sqlite

Sqlite 是一个非常简单和快速的开源 SQL 引擎。本教程将解释何时最适合使用 Sqlite,而不是像 Mysql 或 Postgres 这样的完整的关系型数据库管理系统,以及如何安装它和基本的使用示例,涵盖 CRUD - 创建、读取、更新和删除。

误解


不要被误导以为 Sqlite 只适用于测试和开发。例如,它对每天接收多达 100,000 次点击的网站也能正常工作–这是一个保守的限制。Sqlite 数据库的最大大小为 140 TB(这应该足够了,对吧?),而且它可能比完整的关系型数据库管理系统要快得多。完整的数据库和所有其他必要的数据都存储在主机文件系统中的普通文件中,因此不需要单独的服务器进程(消除了所有需要慢速进程间通信的需求)。

在 VPS 上的最佳使用


Sqlite 专注于简单性。因为它完全内部化,通常比其他替代方案快得多。如果您正在寻找可移植性(关于语言和平台)、简单性、速度和小内存占用量–Sqlite 是理想的选择。它的缺点只有在需要高读写并发性时才会显现:Sqlite 一次只能支持一个写入者,并且通常高的文件系统延迟可能会在需要许多客户端同时访问 Sqlite 数据库时变得不方便。最后一个可能的缺点是,它的语法虽然类似于其他 SQL 系统,但是是独特的。虽然从 Sqlite 转移到另一个系统相当简单,但如果您“超越”了 Sqlite,转换过程中会涉及一些开销。

有关更多信息,请参阅官方文档中对 Sqlite 优缺点的一些很好的概述。

在 VPS 上安装 Sqlite


sqlite3 模块是标准 Python 库的一部分,因此在标准的 Ubuntu 安装或任何已安装 Python 的系统上,严格来说不需要进一步安装。要在 Ubuntu 上安装 Sqlite 命令行界面,请使用以下命令:

sudo apt-get update
sudo apt-get install sqlite3 libsqlite3-dev

如果需要从源代码编译,则从官方 SQLite 网站获取最新的 autoconf 版本。在撰写本文时:

wget http://sqlite.org/2013/sqlite-autoconf-3080100.tar.gz
tar xvfz sqlite-autoconf-3080100.tar.gz
cd sqlite-autoconf-3080100
./configure
make
make install

(从源代码构建的注意事项:1)不要在标准的 Ubuntu 安装上执行此操作,因为您可能会遇到“头文件和源代码版本不匹配”错误,这是由于已安装版本与新安装版本之间的冲突引起的。2)如果 make 命令似乎需要进一步的输入,只需耐心等待,因为源代码编译可能需要一段时间)。

基本命令行界面用法


要创建一个数据库,请运行以下命令:

sqlite3 database.db

其中 ‘database’ 是您的数据库的名称。如果文件 database.db 已经存在,Sqlite 将打开与之的连接;如果不存在,它将被创建。您应该会看到类似以下的输出:

SQLite version 3.8.1 2013-10-17 12:57:35
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite>

现在让我们创建一个表并插入一些数据。这个名为 “wines” 的表有四列:ID、葡萄酒的生产商、葡萄酒的种类和葡萄酒的产地国家。因为现在还不是周五,我们只会向我们的数据库中插入三种葡萄酒:

CREATE TABLE wines (id integer, producer varchar(30), kind varchar(20), country varchar(20)); 
INSERT INTO WINES VALUES (1, "Rooiberg", "Pinotage", "South Africa");
INSERT INTO WINES VALUES (2, "KWV", "Shiraz", "South Africa");
INSERT INTO WINES VALUES (3, "Marks & Spencer", "Pinot Noir", "France");

我们已经创建了数据库、一个表和一些条目。现在按 Ctrl + D 退出 Sqlite,并键入以下命令(再次用您的数据库名称替换 ‘database’),这将重新连接到我们刚刚创建的数据库:

sqlite3 database.db

现在键入:

SELECT * FROM wines;

您应该会看到我们刚刚插入的条目:

1|Rooiberg|Pinotage|South Africa
2|KWV|Shiraz|South Africa
3|Marks & Spencer|Pinot Noir|France

很好。这就是创建和读取的全部内容。让我们进行更新和删除:

UPDATE wines SET country="South Africa" WHERE country="France";

这将更新数据库,使所有标记为来自法国的葡萄酒都改为标记为来自南非。使用以下命令检查结果:

SELECT * FROM wines;

您应该会看到:

1|Rooiberg|Pinotage|South Africa
2|KWV|Shiraz|South Africa
3|Marks & Spencer|Pinot Noir|South Africa

现在我们所有的葡萄酒都来自南非。让我们为了庆祝喝掉 KWV,并从我们的数据库中删除它:

DELETE FROM wines WHERE id=2;
SELECT * FROM wines;

我们应该会看到我们的酒窖中少了一种葡萄酒:

1|Rooiberg|Pinotage|South Africa
3|Marks & Spencer|Pinot Noir|South Africa

这涵盖了所有基本的数据库操作。在我们结束之前,让我们尝试一个稍微不太琐碎的例子,它使用了两个表和一个基本的连接。

使用命令 Ctrl + D 退出 Sqlite 并使用 sqlite3 database2.db 重新连接到一个新的数据库。

我们将创建一个非常类似的 wines 表,但还有一个 countries 表,它存储国家的名称和当前总统。让我们首先创建 countries 表,并插入南非和法国的数据(注意,您可以一次复制粘贴多行 sqlite 代码):

CREATE TABLE countries (id integer, name varchar(30), president varchar(30));
INSERT INTO countries VALUES (1, "South Africa", "Jacob Zuma");
INSERT INTO countries VALUES(2, "France", "Francois Hollande");

然后我们可以使用以下命令重新创建我们的 wines 表:

CREATE TABLE wines (id integer, kind varchar(30), country_id integer);
INSERT INTO wines VALUES (1, "Pinotage", 1);
INSERT INTO wines VALUES (2, "Shiraz", 1);
INSERT INTO wines VALUES (3, "Pinot Noir", 2);

现在让我们看看南非有哪些种类的葡萄酒:

SELECT kind FROM wines JOIN countries ON country_id=countries.id WHERE countries.name="South Africa";

您应该会看到:

Pinotage
Shiraz

这涵盖了一个基本的连接。请注意,Sqlite 为您做了很多事情。在上面的连接语句中,默认为 INNER JOIN,尽管我们只使用了关键字 JOIN。此外,我们不必指定 wines.country_id,因为它是明确的。另一方面,如果我们尝试以下命令:

SELECT kind FROM wines JOIN countries ON country_id=id WHERE country_id=1;

我们将收到错误消息 Error: ambiguous column name: id。这是公平的,因为我们的两个表都有一个 id 列。但一般来说,Sqlite 是相当宽容的。它的错误消息往往使得定位和修复任何问题变得相当简单,这有助于加快开发过程。

有关语法的进一步帮助,官方文档中充满了像这样的图表,这可能会有所帮助,但如果您更喜欢具体的示例,这里有一个带有大多数连接类型概述的教程链接。

最后,Sqlite 在所有主要语言中都有封装和驱动程序,并且可以在大多数系统上运行。可以在此处找到许多它们的列表。


目录
相关文章
|
SQL 数据可视化 关系型数据库
5个实用的SQLite数据库可视化工具(GUI)
5个实用的SQLite数据库可视化工具(GUI)
3933 3
|
C# 开发者
深入理解C#中的`Task<T>`:异步编程的核心
【1月更文挑战第3天】本文旨在探讨C#中`Task<T>`的使用和理解,作为异步编程模式的核心组件。`Task<T>`允许开发者在不阻塞主线程的情况下执行异步操作,并返回一个指定类型`T`的结果。通过定义返回`Task<T>`的异步方法、使用`async`和`await`关键字、处理异常以及获取任务结果,开发者可以编写出高效且响应迅速的应用程序。此外,本文还介绍了如何配置任务以及实现任务的连续性和组合,为掌握C#中的异步编程提供了全面的指导。
|
Ubuntu 安全 Linux
Docker的安装和版本详细介绍
Docker的安装和版本详细介绍
3147 0
Docker的安装和版本详细介绍
|
10月前
|
人工智能 并行计算 算法
三相PWM整流器有限集模型预测电流控制Simulink仿真模型
三相PWM整流器有限集模型预测电流控制Simulink仿真模型
318 0
|
机器学习/深度学习 存储 人工智能
【AI系统】模型剪枝
本文概述了模型剪枝的概念、方法及流程,旨在通过移除神经网络中冗余或不重要的参数,实现模型规模的减小和效率的提升。剪枝不仅有助于降低模型的存储和计算需求,还能增强模型的泛化能力。文章详细介绍了剪枝的定义、分类、不同阶段的剪枝流程,以及多种剪枝算法,如基于参数重要性的方法、结构化剪枝、动态剪枝和基于优化算法的全局剪枝策略。通过这些方法,可以在保持模型性能的同时,显著提高模型的计算速度和部署灵活性。
1811 2
【AI系统】模型剪枝
|
JSON 监控 JavaScript
Swagger UI 本地主机教程: 如何在本地使用 Swagger UI?
Swagger UI 提供在线和离线版本,但由于各种原因,你可能需要在本地使用 Swagger UI。 在本文中,我们将向你展示如何在本地使用 Swagger UI。
|
运维 监控 开发者
tasklist命令的应用实例
tasklist命令的应用实例 原创
698 7
|
SQL 分布式计算 数据挖掘
深入理解用户定义函数(UDF)
【8月更文挑战第31天】
2902 1
|
C# 数据库 C++
手把手教你使用C#操作SQLite数据库,新建数据库,创建表,插入,查询,删除,运算符,like(持续更新)
有问题欢迎留言!!!  目录: 一、新建项目,添加引用 二、创建数据库 三、创建表 四、插入数据  五、查询数据  六、删除数据  七、运算符 八、like语句 我的环境配置:windows 64,VS,SQLite(点击下载),System.Data.SQLite.DLL(点击下载)。
8019 1
|
监控 jenkins 持续交付
Jenkins 面试题及答案整理,最新面试题
Jenkins 面试题及答案整理,最新面试题
1661 0