如何和何时使用 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 数据库 数据库管理
sqlite3——sqlite3应用相关函数
sqlite3——sqlite3应用相关函数
259 0
|
SQL Java 数据库连接
|
SQL .NET C#
C# 中 SQLite 使用介绍
原文:C# 中 SQLite 使用介绍 关于SQLite          SQLite是一款轻型的嵌入式的遵守ACID的关系型数据库管理系统,诞生已有15个年头了。随着移动互联的发展,现在得到了更广泛的使用。
1596 0
|
Java PHP 数据库
|
SQL 数据库 数据安全/隐私保护
|
SQL 存储 关系型数据库
|
SQL 数据库管理 Windows
|
关系型数据库 数据库管理 MySQL