分享到

簡介

在本文中,我們將介紹如何在 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 工具將會建立資料庫檔案。

若要更明確地建立新的資料庫,請將 --new 新增至 .open <FILENAME> 命令。在這裡,我們透過建立 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 <表格名稱>:這是基本的命令陳述式。在範例中,<表格名稱>student,並且應該是您打算為表格命名的任何名稱。
  • <欄位名稱> <資料類型>:此語法定義表格中的基本欄位。在範例中,欄位名稱為 first_name,而其對應的資料類型由 SQLite 資料類型定義為 TEXT
  • <欄位約束>:欄位約束是選用的限制,為輸入表格的資料新增額外要求。在範例中,欄位約束 Not Null 已新增至 student_email 欄位。這確保了在未填寫此欄位的情況下,不會建立任何條目。
  • <表格約束>:與欄位約束類似,表格約束是選用的,用於為您的資料新增額外要求。但有一種例外情況,如果約束影響的是多個欄位而不是單一欄位的互動。在我們的範例中,將 PRIMARY KEY 新增至 id 欄位是表格約束的一個範例。

重要的是要注意,CREATE TABLE 陳述式預設會在 main 資料庫中建立您指定的表格。如果您有多個資料庫連線處於開啟狀態,您需要在陳述式中指定 <資料庫>.<表格>,以便在 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
);

預設情況下,當嘗試建立已存在的表格而沒有 IF NOT EXISTS 子句時,SQLite 會擲回錯誤。透過新增此子句,預設行為會被覆寫為警告而不是錯誤。命令的其餘行為保持不變。

如何使用 .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 中建立和刪除資料庫和表格的基本知識。逐步介紹的命令是開始使用 SQLite 的一些最基本命令,可讓您開始組織和建構您的資料。

在提到的陳述式(例如 CREATE TABLEDROP TABLE)中,有許多額外的參數可以根據使用案例進行考量。您可以在官方 SQLite 文件中閱讀有關這些陳述式的更多詳細資訊。

關於作者
Alex Emerich

Alex Emerich

Alex 是一位典型的賞鳥、熱愛嘻哈的書蟲,也喜歡撰寫關於資料庫的文章。他目前住在柏林,在那裡可以看到他像李奧波德·布魯姆一樣漫無目的地在城市中漫步。