如何以及何时使用 Sqlite

<$>[备注] 注意: 本教程使用的是Ubuntu的弃用版本。点击此处阅读为Ubuntu 20.04.编写的更新版本 <$>

Sqlite是一个非常简单、快速的开源SQL引擎。本教程将解释何时使用Sqlite(相对于成熟的RDBMS,如MySQL或Postgres)是最佳的,以及如何安装Sqlite,以及基本的用法示例,包括CRUD-Create、Read、Update和Delete。

误解


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

VPS的最佳使用


SQLite专注于简单性。因为它是完全内部的,所以它通常比替代品快得多。如果您正在寻找可移植性(关于语言和平台)、简单性、速度和小内存占用--Sqlite是理想的选择。它的缺点只有在需要高读写并发性时才明显:Sqlite一次只能支持一个writer,如果需要多个客户端同时访问Sqlite数据库,通常高的文件系统延迟可能会带来不便。最后一个可能的缺点是,它的语法虽然与其他SQL系统相似,但却是独特的。虽然迁移到另一个系统是相当微不足道的,但如果您确实超过了Sqlite,那么在转换过程中将涉及一些开销。

有关更多信息,官方documentation.中有一些关于Sqlite利弊的非常好的概述

在VPS上安装Sqlite


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

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

如果你需要从源代码编译,那么从SQLite官方网站获取最新的AutoConf版本.在撰写本文时:

1wget http://sqlite.org/2013/sqlite-autoconf-3080100.tar.gz
2tar xvfz sqlite-autoconf-3080100.tar.gz
3cd sqlite-autoconf-3080100
4./configure
5make
6make install

(从源代码构建注意事项:1)不要在标准的Ubuntu安装上这样做,因为由于已经安装的版本和新安装的版本之间存在冲突,您可能会收到)如果`make‘命令似乎期待进一步的输入,请耐心等待,因为源代码可能需要一段时间才能编译)。

基本命令行界面使用方法


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

1sqlite3 database.db

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

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

现在,让我们创建一个表并插入一些数据。这个名为WINES的表有四列:ID、葡萄酒生产商、葡萄酒种类和葡萄酒原产地。由于还不到周五,我们将只向我们的数据库中插入三种葡萄酒:

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

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

1sqlite3 database.db

现在键入:

1SELECT * FROM wines;

你应该看到我们刚刚做的条目:

11|Rooiberg|Pinotage|South Africa
22|KWV|Shiraz|South Africa
33|Marks & Spencer|Pinot Noir|France

太棒了。这就是创作和阅读。让我们进行更新并删除:

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

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

1SELECT * FROM wines;

你应该看到:

11|Rooiberg|Pinotage|South Africa
22|KWV|Shiraz|South Africa
33|Marks & Spencer|Pinot Noir|South Africa

现在我们所有的葡萄酒都来自南非。让我们庆祝一下KWV,并将其从我们的数据库中删除:

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

我们的酒窖里应该少放一种酒

11|Rooiberg|Pinotage|South Africa
23|Marks & Spencer|Pinot Noir|South Africa

这涵盖了所有基本的数据库操作。在我们结束之前,让我们再来看一个不那么简单的例子,它使用了两个表和一个基本连接。

使用Ctrl+D命令退出Sqlite,并使用sqlite3 datase2.db重新连接到新数据库。

我们将创建一个非常类似的‘葡萄酒’表,但也会创建一个存储国家名称及其现任总统的‘国家’表。让我们首先创建COUNTRIES表,并使用以下命令将南非和法国插入其中(请注意,您可以一次复制粘贴几行SQLite代码):

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

然后,我们可以使用以下命令重新创建我们的葡萄酒桌:

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

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

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

您应该看到:

1Pinotage
2Shiraz

这涵盖了基本的联接。请注意,Sqlite为您做了很多事情。在上面的JOIN语句中,虽然我们只使用了关键字JOIN,但默认为INTER JOIN。而且,我们不必指定wines.Country_id,因为它是明确的。另一方面,如果我们尝试以下命令:

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

我们会收到错误消息Error:Amplicous Column Name:id。这很公平,因为我们的两个表都有一个‘id’列。但总的来说,Sqlite是相当宽容的。它的错误消息往往使定位和修复任何问题变得相当琐碎,这有助于加快开发过程。

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

最后,Sqlite拥有所有主要语言的包装器和驱动程序,可以在大多数系统上运行。其中许多的列表可以在here

Published At
Categories with 技术
Tagged with
comments powered by Disqus