事務:Transaction詳解


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命令立即恢復到初始狀態。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM