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