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