分享到

简介

在本文中,我们将介绍在 SQLite 中创建和销毁数据库。我们可以快速回顾一下这两个术语

  • 数据库:将不同的结构集和数据集相互区分
  • :定义数据结构并在数据库中存储实际的数据值

SQLite 使用命令行来处理您的数据库文件。要继续学习,您需要下载适合您机器的 SQLite CLI。让我们开始吧。

创建数据库

首先,在您的命令提示符中输入 sqlite3,启动一个新的 SQLite shell。结果将类似于以下内容

>sqlite3
SQLite version 3.32.3 2020-06-18 17:32:03
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>

默认情况下,SQLite 会话将使用一个 内存数据库 开始。这意味着它目前没有从文件中读取数据。

如果您已经拥有 持久性 数据库,可以使用 .open <FILENAME> 命令打开其现有文件。例如,在以下命令中,将打开预先存在的 test.db 数据库。

.open test.db

注意:如果您指定一个不存在的文件名,sqlite3 工具将创建数据库文件。

要更明确地创建新的数据库,请在 .open <FILENAME> 命令中添加 --new。这里我们将通过创建 people.db 来演示该命令。

.open --new people.db

这将在整个会话期间将您现有的更改保存到您指定的数据库文件中。

列出数据库连接

现在您已经创建了数据库,可以使用 .database 命令检查您的连接。

.database

以下是该命令返回结果的示例,将显示 main 数据库。

sqlite> .database
main: /Users/user/people.db
sqlite>

对于某些用例,您可能希望将其他数据库添加到当前连接中。这可以使用 ATTACH DATABASE 语句来完成,如下所示,通过添加 test.db 到我们的活动连接来演示。

ATTACH DATABASE "test.db" AS test;

现在,当我们运行 .database 命令时,将返回以下两个连接:maintest 数据库。

sqlite> .database
main: /Users/user/people.db
test: /Users/user/test.db
sqlite>

在 SQLite 中创建数据库内的表

创建数据库并验证连接后,您可以开始在数据库中引入数据结构。

如何使用 SQLite 的 CREATE TABLE 命令

在本节中,我们将通过创建一个 student 表,将数据结构添加到我们新创建的 people.db 数据库中。要在您的数据库中创建表,您将使用以下语法使用 CREATE TABLE 语句

CREATE TABLE student (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER,
student_email TEXT NOT NULL,
class TEXT
);

我们可以将上面的语句分解成以下几部分

  • CREATE TABLE <table name>:这是基本命令语句。在示例中,<table name>student,应该与您要命名的表的名称相同。
  • <column name> <data type>:此语法定义了表中的一个基本列。在示例中,列名将是 first_name,其对应的数据类型由 SQLite 数据类型 定义为 TEXT
  • <column constraint>:列 约束 是可选的限制,为输入您的表的數據添加了额外的要求。在示例中,列约束 Not Null 被添加到 student_email 列。这将确保在该列没有填充的情况下不进行任何条目。
  • <table constraint>:与列约束一样,表约束是可选的,可以为您的数据添加额外的要求。如果约束影响多个列而不是单个列的交互,则有一个例外。在我们的示例中,将 PRIMARY KEY 添加到 id 字段是表约束的一个示例。

需要注意的是,CREATE TABLE 语句将默认在 main 数据库中创建您指定的表。如果您打开了多个数据库连接,则需要在您的语句中指定 <database>.<table>,以便在 main 以外的数据库中创建该表。调整之前的示例将如下所示,以便在 test 中创建该表

CREATE TABLE test.student (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER,
student_email TEXT NOT NULL,
class TEXT
);

如何仅在表不存在时创建表

为了确保您创建的表不存在,可以在前面的示例中添加可选的 IF NOT EXISTS 子句,如下所示

CREATE TABLE IF NOT EXISTS student (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER,
student_email TEXT NOT NULL,
class TEXT
);

默认情况下,SQLite 在尝试创建已存在的表时,如果没有 IF NOT EXISTS 子句,会抛出错误。通过添加此子句,默认行为将被覆盖,改为发出警告而不是错误。命令的其余行为保持不变。

如何使用 .schema 验证您的表

创建表后,可以使用 .schema 命令验证表结构。如果要确保之前创建的 student 表结构符合预期,可以使用以下语法进行检查

.schema student

对于 student 表,返回的结果将如下所示

sqlite> .schema student
CREATE TABLE student (id INTEGER PRIMARY KEY, first_name TEXT, last_name TEXT, age INTEGER, student_email TEXT NOT NULL, class TEXT);
sqlite>

为了获得更易读的结果,可以使用 .fullschema --indent 命令。这将显示连接的数据库的模式,并具有更好的间距

.fullschema --indent
sqlite> .fullschema --indent
CREATE TABLE student (
id INTEGER PRIMARY KEY,
first_name TEXT,
last_name TEXT,
age INTEGER,
student_email TEXT NOT NULL,
class TEXT
);
sqlite>

注意.fullschema 命令还将包含统计表转储(如果存在)。我们现在不讨论这个,但在某些情况下,拥有此输出可能会有用。

删除表

要从 SQLite 数据库中删除表,您将使用 DROP TABLE 语句。此语句用于删除 student 表,如下所示

DROP TABLE IF EXISTS student;

删除表时,IF EXISTS 语句是可选的。它添加的行为确保命令仅在表存在时运行。如果表不存在,则该语句将被忽略,不会发生任何操作。

删除数据库

由于 SQLite 没有像其他 关系型数据库(如 MySQLPostgreSQL)那样拥有独立的服务器进程,因此不需要 DROP DATABASE 语句。SQLite 是一个嵌入式 数据库引擎,因此要删除数据库,您必须从机器上删除该文件。此操作将使数据库不再可访问。

总结

本文介绍了在 SQLite 中创建和删除数据库和表的 basics。文中介绍的命令是 SQLite 入门的几个最 basic 命令,可以帮助您开始组织和构建数据。

在前面提到的语句(如 CREATE TABLEDROP TABLE)中,根据具体用例,可以考虑许多额外的参数。您可以在 官方 SQLite 文档 中详细了解这些语句。

作者简介
Alex Emerich

Alex Emerich

Alex 是一个典型的爱鸟、爱嘻哈的书虫,也喜欢写关于数据库的文章。他目前住在柏林,经常漫无目的地像利奥波德·布鲁姆一样在城市里闲逛。