簡介
在本文中,我們將介紹如何在 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 <表格名稱>
:這是基本的命令陳述式。在範例中,<表格名稱>
是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 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 結構描述產生遷移檔案,並將其套用至您的資料庫。