簡介
在本文中,我們將介紹 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 工具將建立該資料庫檔案。
要更明確地建立新資料庫,請在 .open <FILENAME> 命令中新增 --new。這裡我們透過建立 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 命令。這將以更好的間距顯示連線資料庫的 Schema
.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 schema 生成遷移檔案並將其應用於您的資料庫。
