简介
在本文中,我们将介绍 SQLite 中数据库和表的创建与删除。我们可以快速回顾一下这两个术语。
- 数据库:将不同的结构和数据集彼此分隔开
- 表:定义数据结构并在数据库中存储实际数据值
SQLite 使用命令行来处理数据库文件。要继续学习,您需要为您的机器下载相应的 SQLite CLI。让我们开始。
创建数据库
首先,在命令提示符中键入 sqlite3
以启动一个新的 SQLite shell。结果将类似于以下内容
>sqlite3SQLite version 3.32.3 2020-06-18 17:32:03Enter ".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 工具将创建该数据库文件。
要更明确地创建一个新数据库,请将 --new
添加到 .open <FILENAME>
命令。这里我们通过创建 people.db
来演示该命令。
.open --new people.db
这会将您现有的更改保存到您给定的数据库文件中,以便在会话的剩余时间内使用。
列出数据库连接
现在您已经创建了数据库,您可以使用 .database
命令来检查您的连接。
.database
以下说明了命令的返回结果,将显示 main
数据库。
sqlite> .databasemain: /Users/user/people.dbsqlite>
对于某些用例,您可能希望将其他数据库添加到当前连接。这可以使用 ATTACH DATABASE
语句完成,如下面的示例所示,将 test.db
添加到我们的活动连接。
ATTACH DATABASE "test.db" AS test;
现在,当我们运行 .database
命令时,我们将获得以下两个返回的连接,即 main
和 test
数据库。
sqlite> .databasemain: /Users/user/people.dbtest: /Users/user/test.dbsqlite>
在 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 studentCREATE 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 --indentCREATE 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 没有像 MySQL 或 PostgreSQL 等其他关系数据库那样的单独服务器进程,因此不需要 DROP DATABASE
语句。SQLite 是一种嵌入式数据库引擎,因此要删除数据库,您必须从计算机中删除该文件。此操作将使数据库不再可访问。
结论
本文介绍了在 SQLite 中创建和删除数据库及表的基础知识。文中介绍的命令是开始使用 SQLite 的一些最基本命令,它们使您可以开始组织和结构化您的数据。
在提到的语句中,例如 CREATE TABLE
和 DROP TABLE
,根据用例,可以考虑许多其他参数。您可以在官方 SQLite 文档 中阅读有关此类语句的更多详细信息。
当使用 Prisma 时,您可以使用 Prisma Migrate 来创建数据库和表。使用 Prisma Migrate 开发 根据声明式 Prisma 模式 生成迁移文件,并将它们应用于您的数据库。