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