mysql 业务账户_mysql的事务
一、事務定義
Transaction
事務:一個最小的不可再分的工作單元;通常一個事務對應一個完整的業務(例如銀行賬戶轉賬業務,該業務就是一個最小的工作單元)
一個完整的業務需要批量的DML(insert、update、delete)語句共同聯合完成
事務只和DML語句有關,或者說DML語句才有事務。這個和業務邏輯有關,業務邏輯不同,DML語句的個數不同
轉賬操作理解事務
關于銀行賬戶轉賬操作,賬戶轉賬是一個完整的業務,最小的單元,不可再分—————也就是說銀行賬戶轉賬是一個事務。
以下是銀行賬戶表t_act(賬號、余額),進行轉賬操作
update t_act set balance=400 where actno=1;update t_act set balance=200 where actno=2;
以上兩臺DML語句必須同時成功或者同時失敗。最小單元不可再分,當第一條DML語句執行成功后,并不能將底層數據庫中的第一個賬戶的數據修改,只是將操作記錄了一下;這個記錄是在內存中完成的;當第二條DML語句執行成功后,和底層數據庫文件中的數據完成同步。若第二條DML語句執行失敗,則清空所有的歷史操作記錄,要完成以上的功能必須借助事務
二、事務四大特征(ACID)
原子性(A):事務是最小單位,不可再分
一致性(C):事務要求所有的DML語句操作的時候,必須保證同時成功或者同時失敗
隔離性(I):事務A和事務B之間具有隔離性
持久性(D):是事務的保證,事務終結的標志(內存的數據持久到硬盤文件中)
三、關于事務的一些術語
開啟事務:Start Transaction
事務結束:End Transaction
提交事務:Commit Transaction
回滾事務:Rollback Transaction
四、事務四大特性之一————隔離性(isolation)
1、read uncommitted
事務A和事務B 事務A未提交的數據,事務B可以讀取到
這里讀取的數據叫做臟數據
這種隔離級別最低,這種級別一般是在理論上存在,數據庫隔離級別一般都高于改級別
2、read committed
事務A和事務B, 事務A提交的數據,事務B才能讀取到
這種隔離級別高于讀未提交
這種級別可以避免臟數據
這種隔離級別會導致“不可重讀取”
Oracle默認的隔離級別
3、repeatable read
事務A和事務B 事務A提交之后的數據,事務B讀取不到
事務B是可重復讀取數據
這種隔離級別高于讀已提交
換句話說,對方提交之后的數據,我還是讀取不到
這種隔離級別可以避免“不可重復讀取”,達到可重復讀取
比如1點和2點讀取到數據是同一個
Mysql默認隔離級別
雖然可以達到可重復讀取 但是會導致“幻想讀”
4、serializable
事務A和事務B 事務A在操作數據庫時,事務B只能排隊等待
這種隔離級別很少使用 吞吐量太低,用戶體驗差
這種級別可以避免“幻想讀”,每一次讀取的都是數據庫中真實存在數據 事務A與事務B串行 而并不并發
五、隔離級別與一致性關系
六、設置事務隔離級別
方式一
可以在my.ini文件中使用transaction-isolation選項來設置服務器的缺省事務隔離級別。
該選項值可以是:
– READ-UNCOMMITTED–READ-COMMITTED–REPEATABLE-READ–SERIALIZABLE? 例如:[mysqld]
transaction-isolation = READ-COMMITTED
方式二
通過命令動態設置隔離級別
? 隔離級別也可以在運行的服務器中動態設置,應使用SET TRANSACTION ISOLATION LEVEL語句。
其語法模式為:
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL 其中的可以是:
–READ UNCOMMITTED–READ COMMITTED–REPEATABLE READ–SERIALIZABLE? 例如:SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的mysql 业务账户_mysql的事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java最长回文子序列_LeetCode
- 下一篇: java+实现集合并运算_JAVA程序设