《MySQL—事務》要點:
本文介紹了MySQL—事務,希望對您有用。如果有疑問,可以聯系我們。
先來考慮一個實際的需求:
有一張“銀行賬戶表”,現在我要讓A用戶給B用戶轉賬.
此時正確的做法是:
A賬戶金額減少,B賬戶增加
此時,出現了緊急情況,設備斷電,而斷電的時間恰恰很巧:
A賬戶金額減少之后,B賬戶金額增加之前,發生了斷電
因此,轉賬的金額就這么不知去向了
在“這個需求”中,我們面臨繼續辦理的問題:
當一系連續的操作因為某些原因被打斷以后出現了數據庫的“紛歧致性”
“這個具體問題”解決辦法是:
在一個單獨的空間中,先上A賬戶金額減少,但此時不修改表.再讓B賬戶金額增加,也不修改表.最后核對一下總金額與原表是否一樣,如果一樣則一次性修改表
事務機制是專門用來辦理上述問題的數據庫機制,它可以保護相關聯的操作一起完成,或者一起失敗
針對的對象:一系列,連續且相關的操作
原子性:一系列連續且相關的操作必需同時成功或同時失敗
隔離性:當一個事務操作了表中的一行,那么在這個事務結束前,該行不能由其余會話操作
意義:保證了數據庫的完整性和一致性
實現:上述所描述的“單獨的空間”,其實是通過“事務日志”來實現的
為了能夠讓知識點直觀,我們通過代碼示例來演示“上述轉賬失敗的過程”
1、創建相應的數據庫
Python學習交流群:330637182
2、創建相應的表
Python學習交流群:330637182
3、插入相關數據
Python學習交流群:330637182
4、開始發工資(在沒有事務機制的掩護下發生了斷電)
Python學習交流群:330637182
5、再次進入數據庫,查詢相關的電子現金信息
Python學習交流群:330637182
id | account | name | balance |
---|---|---|---|
1 | 1111111111111111111 | Tuple | 100.00 |
2 | 0000000000000000000 | TanzhouEdu | 9992320.00 |
此時出現了無法解救的損失,電子現金消失了
自動模式(默認)
心細的同學會發現,默認情況下,我們如果向MySQL發送一條修改數據庫的命令,命令執行完成后會立即修改數據庫表.就像上述案例中的 UPDATE my_account SET balance=balance-7680 WHERE id=2; 一樣.
此時,數據庫將每一條命令當成一個單獨的事務.
如果我們想要在“自動模式”下,使用“事務”,那么我們必需使用如下幾個命令:
Python學習交流群:330637182
注意:一旦我們“提交”,或者“回滾”了事務,那么就視為事務結束.在事務結束的情況下,再“提交”,或者“回滾”是沒有意義的
手動模式
這次,我們在“事務自動模式下”手動開始一個事務,并利用這個來完成我們轉賬的效果.
注意:為了保證演示效果,我們必要同時連接兩個MySQL終端(會話),分別為S1和S2.
Python學習交流群:330637182
1、在S1中,開啟自定義新事務
Python學習交流群:330637182
2、在S1中,開始發工資(暫時任然只做到停電前那一步)
Python學習交流群:330637182
但是我們在S2中查看金額
Python學習交流群:330637182
id | account | name | balance |
---|---|---|---|
1 | 1111111111111111111 | Tuple | 100.00 |
2 | 0000000000000000000 | TanzhouEdu | 9992320.00 |
發現,在S2中并不克不及看到S1中所做的改變.
3、接下來我們把從潭州教育財務卡中拿出的金額給Tuple老師,并提交這一系列相關的操作
Python學習交流群:330637182
4、此時我們再使用
Python學習交流群:330637182
id | account | name | balance |
---|---|---|---|
1 | 1111111111111111111 | Tuple | 7780.00 |
2 | 0000000000000000000 | TanzhouEdu | 9984640.00 |
我們發現,此時,S2才能看到這其中的修改,否則對S1的任何修改都弗成見.
這個過程中,只要我們“手動開始了一個自定義新事務”,當這個事務提交前,這個操作是放在“事務日志”中的,并不會真的影響到我們的數據庫,只有當我們提交的以后才會真的修改我們的數據表.
喜歡python或者想學習python的朋友可以加QQ群:330637182!群內每天會更新python材料,還有大牛指導喲!
歡迎參與《MySQL—事務》討論,分享您的想法,維易PHP學院為您提供專業教程。
轉載請注明本頁網址:
http://www.snjht.com/jiaocheng/7098.html