什麼是交易控制
#交易是指作為一個邏輯工作單元執行的一系列操作,這些操作要嘛全部成功,要嘛全部失敗。事務確保了多個資料的修改作為一個單元來處理。
假如,張三在ATM機上給李四轉帳100元,在銀行的業務系統中,主要會執行兩步驟資料變更操作:
試問,如果操作1執行成功,操作2執行失敗會發生什麼事?
相關免費學習推薦:mysql影片教學
交易的四個特性
如果某個資料庫支援事務,那麼該資料庫必須具備ACID四個特性,分別是Atomicity(原子性)、Consistency(一致性)、Isolation(隔離)、 Durability(持久性)。
MySQL的事務控制
在預設情況下,MySQL是自動提交交易的,也就是每一則INSERT、UPDATE、DELETE的SQL語句提交後會立即執行COMMIT作業。因此,要開啟一個事務,可以使用start transaction或begin,或是將autocommit的值設為0.
#範例
USE student;SHOW TABLES;
# 2. 建立bank_account資料表並插入兩筆記錄,設定張三的balance欄位值1000
CREATE TABLE bank_account( id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(30) COMMENT '姓名', balance DECIMAL(18, 2) COMMENT '账户余额');INSERT INTO bank_account(id, name, balance) VALUE(1, '张三', 0);INSERT INTO bank_account(id, name, balance) VALUE(2, '李四', 0);UPDATE bank_account SET balance = balance + 1000 WHERE id = 1;
3. 查看預設的autocommit值
SELECT @@autocommit;
4. 查看bank_account資料表所有記錄
SELECT * FROM bank_account;
5. 開始交易控制並執行兩個SQL語句
START TRANSACTION;UPDATE bank_account SET balance = balance - 100 WHERE id = 1;UPDATE bank_account SET balance = balance + 100 WHERE id = 2;COMMIT;
6. 檢視此時資料表的內容
SELECT * FROM bank_account;
7. 再一次開始交易控制,同樣插入兩個相同的SQL語句,但將commit(提交)變成rollback(回滾)
START TRANSACTION;UPDATE bank_account SET balance = balance - 100 WHERE id = 1;UPDATE bank_account SET balance = balance + 100 WHERE id = 2;ROLLBACK;
8. 再次查看資料表內容,發現回滾之後資料無變化
SELECT * FROM bank_account;
註:本文是部落客MySQL學習的總結,不支援任何商用,轉載請註明出處!如果你也對MySQL學習有一定的興趣與理解,歡迎隨時找部落客交流~
#更多相關免費學習推薦:##mysql教學(影片)
以上是MySQL學習之事務控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!