MySQL - Transactions: A Beginner's Guide
您好,未來的數據庫大師!今天,我們將踏上一段令人興奮的旅程,進入MySQL事務的世界。別擔心您對編程還是新手——我會成為您的友好指南,將複雜的概念分解成易於消化的碎片。所以,拿起您最喜歡的飲料,我們一起來深入探討吧!
MySQL事務
想像您在銀行,從您的儲蓄賬戶轉賬到您的支票賬戶。您不會希望錢從您的儲蓄賬戶消失而不出現在您的支票賬戶中,對吧?這就是事務派上用場的地方!
在MySQL中,事務是一系列被視為單一工作單元的操作。它就像一個圍繞著一組數據庫操作的保護罩,確保它們要么全部成功,要么全部一起失敗。
讓我們看一個簡單的例子:
START TRANSACTION;
UPDATE savings_account SET balance = balance - 100 WHERE account_id = 123;
UPDATE checking_account SET balance = balance + 100 WHERE account_id = 456;
COMMIT;
在這個事務中,我們從儲蓄賬戶轉移了100美元到支票賬戶。START TRANSACTION
命令開始我們的事務,而結尾的COMMIT
命令使這些更改成為永久。
事務的屬性
MySQL中的事務遵循ACID屬性。不,不是實驗室裡找到的那種酸!ACID代表:
- 原子性:事務中的所有操作要么全部成功,要么全部失敗。
- 一致性:在事務之前和之後,數據庫保持一致狀態。
- 隔離性:直到事務完成,事務彼此隔離。
- 持久性:一旦事務提交,即使在系統故障的情況下,它也會保持如此。
將ACID視為您數據庫操作的守護天使,確保一切保持整潔有序!
MySQL中的事務語句
MySQL提供了多個語句來管理事務。讓我們在方便的表格中看看它們:
語句 | 描述 |
---|---|
START TRANSACTION | 開始一個新的事務 |
COMMIT | 將更改永久保存到數據庫 |
ROLLBACK | 撤消當前事務中的更改 |
SET autocommit | 启用或禁用自動提交模式 |
SAVEPOINT | 在事務中創建一個可以後來回滚到的點 |
現在,讓我們詳細探討這些語句。
COMMIT命令
COMMIT
命令就像是您事務的“保存”按鈕。一旦您提交,您所做的所有更改都會變得永久。
START TRANSACTION;
INSERT INTO students (name, age) VALUES ('Alice', 20);
INSERT INTO students (name, age) VALUES ('Bob', 22);
COMMIT;
在這次COMMIT
之後,Alice和Bob正式成為我們學生表的一部分。歡迎登船,Alice和Bob!
AUTOCOMMIT命令
默認情況下,MySQL運行在自動提交模式,這意味著每個語句都被視為一個單獨的事務。您可以這樣關閉它:
SET autocommit = 0;
現在,您需要手動提交您的更改。這就像在電子遊戲中關閉自動保存——確保您記得要定期保存(提交)!
ROLLBACK命令
ROLLBACK
是您的“撤銷”按鈕。如果您的事務中出了問題,您可以使用ROLLBACK
來撤銷所有更改。
START TRANSACTION;
DELETE FROM students WHERE name = 'Alice';
-- 哎呀!我們並不是要刪除Alice!
ROLLBACK;
吁!Alice在我們的數據庫中安然無恙。記住,ROLLBACK
只對尚未提交的更改有效。
SAVEPOINT命令
SAVEPOINT
允許您在事務中創建一個檢查點。如果需要,您可以後來回滚到這個點。
START TRANSACTION;
INSERT INTO students (name, age) VALUES ('Charlie', 21);
SAVEPOINT charlie_added;
INSERT INTO students (name, age) VALUES ('David', 23);
-- 哎呀!我們只想添加Charlie
ROLLBACK TO SAVEPOINT charlie_added;
COMMIT;
在這個場景中,Charlie加入了課程,但David沒有達標。對不起,David!
支持事務的表類型
並不是MySQL中的所有表類型都支持事務。主要的事務安全存儲引擎有:
- InnoDB
- NDB Cluster
InnoDB是最常見的,并且在最近的MySQL版本中是默認的。它就像MySQL存儲引擎的瑞士軍刀——多用途且可靠!
使用客戶端程序進行事務
當使用像命令行客戶端這樣的MySQL客戶端程序時,您可以使用我們討論過的相同的事務命令。這裡有一個小故事來說明:
mysql> START TRANSACTION;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO pet_shop (pet_name, species) VALUES ('Fluffy', 'cat');
Query OK, 1 row affected (0.01 sec)
mysql> INSERT INTO pet_shop (pet_name, species) VALUES ('Rover', 'dog');
Query OK, 1 row affected (0.01 sec)
mysql> COMMIT;
Query OK, 0 rows affected (0.02 sec)
就这样,Fluffy這隻貓和Rover這隻狗找到了他們在寵物店數據庫中的新家!
記住,事務是您維護數據完整性的朋友。它們確保您的數據庫操作即使在計劃不如預期時也是可靠的。在您的MySQL操作中練習使用事務,您很快就會成為數據庫大師!
今天對MySQL事務的課程就介紹到這裡。希望您和我一樣享受這次旅程。持續練習,保持好奇心,並且快樂編程!
Credits: Image by storyset