mysql事务实战_MySQL实战45讲学习-事务相关笔记
1、務(wù)的特性:原子性、一致性、隔離性、持久性
2、多事務(wù)同時執(zhí)行的時候,可能會出現(xiàn)的問題:臟讀、不可重復(fù)讀、幻讀
3、事務(wù)隔離級別:讀未提交、讀提交、可重復(fù)讀、串行化
4、不同事務(wù)隔離級別的區(qū)別:
讀未提交:一個事務(wù)還未提交,它所做的變更就可以被別的事務(wù)看到
讀提交:一個事務(wù)提交之后,它所做的變更才可以被別的事務(wù)看到
可重復(fù)讀:一個事務(wù)執(zhí)行過程中看到的數(shù)據(jù)是一致的。未提交的更改對其他事務(wù)是不可見的
串行化:對應(yīng)一個記錄會加讀寫鎖,出現(xiàn)沖突的時候,后訪問的事務(wù)必須等前一個事務(wù)執(zhí)行完成才能繼續(xù)執(zhí)行
5、配置方法:啟動參數(shù)transaction-isolation
6、事務(wù)隔離的實現(xiàn):每條記錄在更新的時候都會同時記錄一條回滾操作。同一條記錄在系統(tǒng)中可以存在多個版本,這就是數(shù)據(jù)庫的多版本并發(fā)控制(MVCC)。
7、回滾日志什么時候刪除?系統(tǒng)會判斷當(dāng)沒有事務(wù)需要用到這些回滾日志的時候,回滾日志會被刪除。
8、什么時候不需要了?當(dāng)系統(tǒng)里么有比這個回滾日志更早的read-view的時候。
9、為什么盡量不要使用長事務(wù)。長事務(wù)意味著系統(tǒng)里面會存在很老的事務(wù)視圖,在這個事務(wù)提交之前,回滾記錄都要保留,這會導(dǎo)致大量占用存儲空間。除此之外,長事務(wù)還占用鎖資源,可能會拖垮庫。
10、事務(wù)啟動方式:一、顯式啟動事務(wù)語句,begin或者start
transaction,提交commit,回滾rollback;二、set
autocommit=0,該命令會把這個線程的自動提交關(guān)掉。這樣只要執(zhí)行一個select語句,事務(wù)就啟動,并不會自動提交,直到主動執(zhí)行commit或rollback或斷開連接。
11、建議使用方法一,如果考慮多一次交互問題,可以使用commit
work and
chain語法。在autocommit=1的情況下用begin顯式啟動事務(wù),如果執(zhí)行commit則提交事務(wù)。如果執(zhí)行commit work
and chain則提交事務(wù)并自動啟動下一個事務(wù)。
臟讀:
當(dāng)數(shù)據(jù)庫中一個事務(wù)A正在修改一個數(shù)據(jù)但是還未提交或者回滾,
另一個事務(wù)B 來讀取了修改后的內(nèi)容并且使用了,
之后事務(wù)A提交了,此時就引起了臟讀。
此情況僅會發(fā)生在: 讀未提交的的隔離級別.
不可重復(fù)讀:
在一個事務(wù)A中多次操作數(shù)據(jù),在事務(wù)操作過程中(未最終提交),
事務(wù)B也才做了處理,并且該值發(fā)生了改變,這時候就會導(dǎo)致A在事務(wù)操作
的時候,發(fā)現(xiàn)數(shù)據(jù)與第一次不一樣了。 就是不可重復(fù)讀。
此情況僅會發(fā)生在:讀未提交、讀提交的隔離級別.
幻讀:
一個事務(wù)按相同的查詢條件重新讀取以前檢索過的數(shù)據(jù),
卻發(fā)現(xiàn)其他事務(wù)插入了滿足其查詢條件的新數(shù)據(jù),這種現(xiàn)象就稱為幻讀。
幻讀是指當(dāng)事務(wù)不是獨立執(zhí)行時發(fā)生的一種現(xiàn)象,例如第一個事務(wù)對一個表中的數(shù)據(jù)進行了修改,比如這種修改涉及到表中的“全部數(shù)據(jù)行”。同時,第二個事務(wù)也修改這個表中的數(shù)據(jù),這種修改是向表中插入“一行新數(shù)據(jù)”。那么,以后就會發(fā)生操作第一個事務(wù)的用戶發(fā)現(xiàn)表中還存在沒有修改的數(shù)據(jù)行,就好象發(fā)生了幻覺一樣.
一般解決幻讀的方法是增加范圍鎖RangeS,鎖定檢索范圍為只讀,這樣就避免了幻讀。
此情況會回發(fā)生在:讀未提交、讀提交、可重復(fù)讀的隔離級別.
事務(wù)的隔離級別:
四種:讀未提交 、 讀提交 、 可重復(fù)讀、 串行化。
總結(jié)
以上是生活随笔為你收集整理的mysql事务实战_MySQL实战45讲学习-事务相关笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬火车票_python爬取1
- 下一篇: mysql如何处理图片吗_如何解决mys