事務 Transaction詳解

2022-08-29 19:21:17 字數 2112 閱讀 1173

1、事務概念:

一組sql語句操作單元,組內所有sql語句完成乙個業務,如果整組成功:意味著全部sql都實現;如果其中任何乙個失敗,意味著整個操作都失敗。失敗,意味著整個過程都是沒有意義的。應該是資料庫回到操作前的初始狀態。這種特性,就叫「事務」。

2、為什麼要存在事務?

1)失敗後,可以回到開始位置

2)沒都成功之前,別的使用者(程序,會話)是不能看到操作內的資料修改的

3、事務4大特徵acid:

1)原子性[atomicity]:功能不可再分,要麼全部成功,要麼全部失敗

2)一致性[consistency]:事務要求所有的dml語句操作的時候,必須保證同時成功或者同時失敗

3)隔離性[isolation]:事務a和事務b之間具有隔離性

4)永續性[durability]:是事務的保證,事務終結的標誌(記憶體的資料持久到硬碟檔案中)

3、相關概念:

【sql執行過程】1)執行階段   2)將執行結果,提交到資料庫的階段

其中我們的事務日誌,就是儲存執行階段的結果,如果用於選擇提交,則才將執行的結果提交到資料庫。

預設的執行方式叫做,自動提交。執行完畢,自動完成提交工作。如果你想要所有sql語句全部成功,就需要關閉自動提交功能。

「自動提交」:存在乙個系統變數,autocommit可以對自動提交進行設定。

4、事務操作:

方法一:

show variables like 'autocommit'; #檢視自動提交是否開啟

set autocommit=1(開啟自動提交)

set autocommit=0(關閉自動提交),關閉後,再次執行相應的更新語句發現,在其它連線(會話)中檢視資料,沒有發生變化,因為結果沒有提交。

方法二(提倡):

1)開啟事務:start transaction; 關閉自動提交。如果事務結束了,成功或者失敗,都會將自動提交機制,回到start時的狀態。

2)成功-->提交:commit;

3)失敗-->回滾:rollback;

5、重要限制:

儲存引擎必須是innodb才能生效。

6、個人理解:

把事務看作乙個容器,暫時在該容器(start transaction)中操作(增刪改查),如果不出錯,就立即更新資料庫(commit),即公開可見。如果出錯,就立即回滾資料庫(rollback),即恢復初始狀態,資料庫更新停止。

可以高效地防止錯誤的發生,快速恢復至初始化狀態。

7、實驗測試:

步驟一:新建兩張表,一張是班費表(class),另一張是學生個人錢財表(stu)。

步驟二:開啟事務進行資料操作,注意同時開兩個資料庫視窗,方便我們檢視實驗效果

視窗1:

此時,可以檢視到視窗1中的資料已經更新(我的理解是僅僅是在「事務容器」內更新完成),但是還沒有上傳至資料庫真正更新。在另乙個視窗中可見資料庫並沒有更新成功:

此時,必須在視窗1中的事務中輸入commit命令,才能完成真正意義上的更新,無論開多少個視窗,都可以看到資料更新的內容:

如果在「事務容器」中更新資料時出現問題,就需要使用rollback命令立即恢復到初始狀態。

MySQL 事務 Transaction 詳解

該部落格詳解mysql中的事務 關於銀行賬戶轉賬操作,賬戶轉賬是乙個完整的業務,最小的單元,不可再分 也就是說銀行賬戶轉賬是乙個事務actno balance 1 500 2 100轉賬操作update t act set balance 400 where actno 1 update t act...

MySQL 事務 Transaction 詳解

transaction 事務 乙個最小的不可再分的工作單元 通常乙個事務對應乙個完整的業務 例如銀行賬戶轉賬業務,該業務就是乙個最小的工作單元 乙個完整的業務需要批量的dml insert update delete 語句共同聯合完成 事務只和dml語句有關,或者說dml語句才有事務。這個和業務邏輯...

MySQL事務 Transaction 詳解

transaction 事務 乙個最小的不可再分的工作單元 通常乙個事務對應乙個完整的業務 例如銀行賬戶轉賬業務,該業務就是乙個最小的工作單元 乙個完整的業務需要批量的dml insert update delete 語句共同聯合完成 事務只和dml語句有關,或者說dml語句才有事務。這個和業務邏輯...