首頁 > 資料庫 > mysql教程 > MySQL學習之事務控制

MySQL學習之事務控制

coldplay.xixi
發布: 2021-04-07 09:32:19
轉載
2778 人瀏覽過

MySQL學習之事務控制

什麼是交易控制

#交易是指作為一個邏輯工作單元執行的一系列操作,這些操作要嘛全部成功要嘛全部失敗。事務確保了多個資料的修改作為一個單元來處理。

  • 在MySQL中,只有使用了Innodb儲存引擎的資料庫或表才支援事物
  • 交易用於維護資料庫的完整性,保證成批的sql語句要嘛都執行,要嘛都不執行
  • 交易用於管理INSERTUPDATEDELETE語句

假如,張三在ATM機上給李四轉帳100元,在銀行的業務系統中,主要會執行兩步驟資料變更操作:

  1. 從張三的帳戶減去100元
  2. 給李四的帳戶增加100元

試問,如果操作1執行成功,操作2執行失敗會發生什麼事?

相關免費學習推薦:mysql影片教學

交易的四個特性

如果某個資料庫支援事務,那麼該資料庫必須具備ACID四個特性,分別是Atomicity(原子性)、Consistency(一致性)、Isolation(隔離)、 Durability(持久性)。

  • 原子性:事務必須是原子工作單元,事務中包含的各操作要么都做,要么都不做
  • 一致性:事務在執行完成時,必須使所有的資料都保持一致狀態
  • 隔離性:交易獨立運作。多個事務之間相互隔離,互不干擾。交易的100%隔離,會犧牲速度
  • 持續性:交易執行完成之後,它對系統的影響是永久性的

MySQL的事務控制

預設情況下,MySQL是自動提交交易的,也就是每一則INSERT、UPDATE、DELETE的SQL語句提交後會立即執行COMMIT作業。因此,要開啟一個事務,可以使用start transactionbegin,或是將autocommit的值設為0.

  • 方法一:MySQL學習之事務控制
  • 方法二:MySQL學習之事務控制

#範例

  1. 登陸資料庫,使用student資料庫並查看所有的資料表
USE student;SHOW TABLES;
登入後複製

MySQL學習之事務控制
# 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;
登入後複製

MySQL學習之事務控制
3. 查看預設的autocommit值

SELECT @@autocommit;
登入後複製

MySQL學習之事務控制
4. 查看bank_account資料表所有記錄

SELECT * FROM bank_account;
登入後複製
登入後複製
登入後複製

MySQL學習之事務控制
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;
登入後複製

MySQL學習之事務控制
6. 檢視此時資料表的內容

SELECT * FROM bank_account;
登入後複製
登入後複製
登入後複製

MySQL學習之事務控制
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;
登入後複製

MySQL學習之事務控制
8. 再次查看資料表內容,發現回滾之後資料無變化

SELECT * FROM bank_account;
登入後複製
登入後複製
登入後複製

MySQL學習之事務控制
註:本文是部落客MySQL學習的總結,不支援任何商用,轉載請註明出處!如果你也對MySQL學習有一定的興趣與理解,歡迎隨時找部落客交流~

#更多相關免費學習推薦:##mysql教學(影片)

以上是MySQL學習之事務控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:csdn.net
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板