SQLite - Transactions: A Beginner's Guide

您好,未來的數據庫大師!今天,我們將踏上一段令人興奮的旅程,進入 SQLite 處理交易的世界。別擔心如果你是編程新手——我會成為你的友好導遊,一步步解釋所有內容。在這個教學結束時,你將能夠像專業人士一樣處理交易!

SQLite - Transactions

什麼是交易?

想像你在銀行,從你的儲蓄賬戶轉賬到你的支票賬戶。你肯定不希望錢從你的儲蓄賬戶消失而不出現在支票賬戶中,對吧?這就是交易的作用。在數據庫術語中,交易是一個工作單元,它作為一個整體執行——它要么完全完成,要么根本不發生。

交易的屬性

交易有四個關鍵屬性,通常記憶為 ACID 的縮寫。讓我們一一解析:

1. 原子性(Atomicity)

原子性意味著“全部或全無”。一個交易中的所有操作要么全部成功,要么全部不執行。這就像做三明治——你要么有所有的材料,要么根本不做三明治。

2. 一貫性(Consistency)

一貫性保證交易將數據庫從一個有效狀態轉變為另一個有效狀態。這就像遵循一個食譜——你從材料開始,以完成的菜肴結束,而不是一個半生不熟的混亂。

3. 隔離性(Isolation)

隔離性意味著並發交易彼此不會干擾。這就像廚房中有多名廚師,每個人都專注於自己的菜肴,而不會打擾其他人的工作。

4. 持久性(Durability)

持久性保證一旦交易被提交,它就會保持提交狀態,即使系統發生故障。這就像在筆記本上寫下你的食譜——即使燈光熄滅,當你打開燈時,你的食譜仍在那裡。

SQLite 中的交易控制

現在,讓我們動手編寫一些實際的 SQLite 代碼!SQLite 提供了多個命令來控制交易:

開始交易(BEGIN TRANSACTION)

這個命令開始一個新交易。這就像說,“好吧,我即將做一件重要的事情,所以請注意!”

BEGIN TRANSACTION;

提交(COMMIT)

這個命令保存當前交易中所有的更改。這就像說,“好了,我完成了。讓我們讓這些更改永久生效。”

COMMIT;

回滾(ROLLBACK)

這個命令撤銷當前交易中所有的更改。這就像說,“哦,我犯了一個錯誤。讓我們假設這從未發生。”

ROLLBACK;

結合所有內容

讓我們看一個完整的例子。想像我們正在管理一個圖書館數據庫,我們想要添加一本新書並更新總書籍數量:

BEGIN TRANSACTION;

INSERT INTO books (title, author) VALUES ('了不起的盖茨比', 'F. 斯科特·菲茨傑拉德');
UPDATE library_stats SET total_books = total_books + 1;

COMMIT;

在這個例子中,我們做了兩件事:

  1. 向我們的 books 表中添加一本新書
  2. 更新我們的 library_stats 表中的總書籍數量

通過將這些操作包在一個交易中,我們確保了它們要么都發生,要么都不發生。這保證了我們數據庫的一致性。

當事情出错時

現在,讓我們看看當事情出错時會發生什麼:

BEGIN TRANSACTION;

INSERT INTO books (title, author) VALUES ('1984', '喬治·奧威爾');
UPDATE library_stats SET total_books = total_books + 1;

-- 哦不!我們意識到我們犯了一個錯誤
ROLLBACK;

在這種情況下,我們開始添加一本書,但然後意識到我們犯了一個錯誤。通過使用 ROLLBACK,我們取消整個交易,我們的數據庫保持不變。

SQLite 中的自動交易

這裡有一個有趣的事實:如果你沒有明確開始一個交易,SQLite 實際上會自動將每個 SQL 語句包在一個交易中。這就像有一個安全網——即使你忘記使用交易,SQLite 也有你的後盾!

SQLite 中的交易方法

讓我們總結一下 SQLite 中的主要交易方法:

方法 描述
BEGIN TRANSACTION 開始一個新交易
COMMIT 保存當前交易中的所有更改
ROLLBACK 撤銷當前交易中的所有更改

結論

好了,各位!你們已經踏出了進入 SQLite 交易世界的第一步。記住,交易就像是包絡你數據庫操作的保護罩,確保你的數據保持一致和可靠。

當你繼續在數據庫編程的旅程上前行時,你會發現交易是無價的工具。它們是數據完整性的無名英雄,在背後默默保持你的數據庫處於最佳狀態。

所以,大膽地進行交易吧!並記住,在數據庫世界中,有時候回滾(ROLLBACK)是沒關係的——這比堅持錯誤要好得多!

Credits: Image by storyset