當前位置:
首頁 >
Mysql 事务学习笔记
發(fā)布時間:2025/7/14
57
豆豆
生活随笔
收集整理的這篇文章主要介紹了
Mysql 事务学习笔记
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1讀寫鎖
1.1為什么為出現(xiàn)讀寫鎖?
當一個人在update這個數(shù)據(jù),另一個人在select查詢這個數(shù)據(jù)的時候.會產(chǎn)生一種數(shù)據(jù)混亂,應運產(chǎn)生的鎖.
鎖的概念:
- 讀鎖是共享的,并且不會阻塞. 寫鎖則是排他的
- 同一個時間內(nèi)只能有一個用戶寫入.
1.2 鎖粒度.
- 太多的鎖又會影響效率,為了保證效率,會給不同級別的失誤.安排不同的鎖.最好只是精確的鎖定. 因為鎖本身不僅影響效率,也消耗資源.通常情況下,鎖越少效率越高.
鎖策略,就是在鎖的開銷和數(shù)據(jù)的安全性做出平衡.大部分商業(yè)數(shù)據(jù)庫并沒有提供特別多選擇,只是在表上加上行級鎖.
1.3 Mysql 的鎖策略
- 表鎖,最基本也是開銷最小策略.搜定這張表,在用戶對表修改時候,需要先獲得鎖,并且阻塞其他用戶的讀寫操作. 只有沒有寫鎖的時候其他用戶才能獲得讀鎖,并且讀鎖之前不會阻塞
- 行級鎖可以最大成都的支持并發(fā)處理
2 事務
事務是一組原子性的sql查詢,如果能執(zhí)行查詢?nèi)空Z句,那么查詢?nèi)?如果又一條語句不成功,那么所有的都不執(zhí)行.事務都要經(jīng)過ACID 測試不然沒有意義
2.1 ACID事務的四項檢測
- 原子性(atomicity)
- 一個事務被視為一個不可分割的最小工作單元.就像原子不可分割一樣.
- 一致性(consistency)
- 數(shù)據(jù)庫總是從一個一致性的狀態(tài)轉換為另一個一致性的狀態(tài).要么全部成功,要么全部失敗,結果應該是一致的,不應該有的成功,有的失敗.
- 隔離性(Isolation)
- 一個事務在做修改成功之前,對其他的事務是不課件的. 當你對一個賬戶進行取款操作,那么另一個程序是無法看見你的操作結果.直到你成功之前
- 隔離級別Isolation Level
- Read uncommited
- 在READ UNCOMMITED級別. 事務中的修改,即使沒有提交,對其他事務可見.
- READ COMMITED
- 大多數(shù)數(shù)據(jù)庫的默認級別都是Read committed.Mysql不是. 一個事務開始的時候,只能看見自己已經(jīng)提交的修改.
在不提交前,對其他事務完全不可見.
- 大多數(shù)數(shù)據(jù)庫的默認級別都是Read committed.Mysql不是. 一個事務開始的時候,只能看見自己已經(jīng)提交的修改.
- REPEATABLE READ
- REPEATABLE READ 解決了臟讀的問題,該級別保證同一個事務多次讀取結果是一致的. 但同事導致幻讀的問題.當讀取某個范圍的數(shù)據(jù)的時候,里一個事務又在該范圍內(nèi)插入新的數(shù)據(jù)
當之前事務在讀取的時候會產(chǎn)生幻行.
- REPEATABLE READ 解決了臟讀的問題,該級別保證同一個事務多次讀取結果是一致的. 但同事導致幻讀的問題.當讀取某個范圍的數(shù)據(jù)的時候,里一個事務又在該范圍內(nèi)插入新的數(shù)據(jù)
- SERIALIZABLE
- 最高Isolation Level級別,通過強制事務串的執(zhí)行.避免了之前說的幻讀,SERIALIZABLE 會在每一行數(shù)據(jù)加鎖.所以可能導致大量超時和鎖爭搶的問題.
非常少用.只有當需要保持數(shù)據(jù)一致性而接受沒有并發(fā)的情況下才考慮.
- 最高Isolation Level級別,通過強制事務串的執(zhí)行.避免了之前說的幻讀,SERIALIZABLE 會在每一行數(shù)據(jù)加鎖.所以可能導致大量超時和鎖爭搶的問題.
- Read uncommited
- 隔離級別Isolation Level
- 一個事務在做修改成功之前,對其他的事務是不課件的. 當你對一個賬戶進行取款操作,那么另一個程序是無法看見你的操作結果.直到你成功之前
- 持久性(durability)
- 一旦事務提交,修改就會永久保存在數(shù)據(jù)庫中.及時系統(tǒng)崩潰也不會丟失.這個策略主要保證數(shù)據(jù)不會丟失.而且上持久性也分不同的級別.有的持久程度高,又的持久程度低.
1-1 各種隔離級別的區(qū)別和特點
| Read uncommitted | YES | YES | YES | NO |
| READ COMMITTED | NO | YES | YES | NO |
| PEPETABLE READ | NO | NO | YES | NO |
| SERIALIZABLE | NO | NO | NO | YES |
轉載于:https://www.cnblogs.com/maxaimee/p/6534272.html
總結
以上是生活随笔為你收集整理的Mysql 事务学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: golang使用reflects调用方法
- 下一篇: mysql 运行 sql 脚本