事務併發處理
一、 數據庫的隔離級別:併發性作用。
1、 ReadUncommited(未提交讀):沒有提交就可以讀取到數據(發出了Insert,但沒有commit就可以讀取到。)很少用
2、 ReadCommited(提交讀):只有提交後纔可以讀,常用,
3、 RepeatableRead(可重複讀):mysql默認級別, 必需提交才能見到,讀取數據時數據被鎖住。
4、 Serialiazble(序列化讀):最高隔離級別,串型的,你操作完了,我纔可以操作,併發性特別不好,
隔離級別 |
是否存在髒讀 |
是否存在不可重複讀 |
是否存在幻讀 |
Read Uncommitted(未提交讀) |
Y |
Y |
Y |
Read Commited(提交讀) |
N |
Y(可採用悲觀鎖解決) |
Y |
Repeatable Read(可重複讀) |
N |
N |
Y |
Serialiazble(序列化讀) |
|
|
|
髒讀:沒有提交就可以讀取到數據稱爲髒讀
不可重複讀:再重複讀一次,數據與你上的不一樣。稱不可重複讀。
幻讀:在查詢某一條件的數據,開始查詢的後,別人又加入或刪除些數據,再讀取時與原來的數據不一樣了。
1、 Mysql查看數據庫隔離級別:
方法:select@@tx_isolation;
2、 Mysql數據庫修改隔離級別:
方法:set transactionisolation level 隔離級別名稱;
例如:修改爲未提交讀:settransaction isolation level read uncommitted;
二、 事務概念(ACID)
ACID即:事務的原子性、一致性、獨立性及持久性
事務的原子性:是指一個事務要麼全部執行,要麼不執行.也就是說一個事務不可能只執行了一半就停止了.比如你從取款機取錢,這個事務可以分成兩個步驟:1劃卡,2出錢.不可能劃了卡,而錢卻沒出來.這兩步必須同時完成.要麼就不完成.
事務的一致性:是指事務的運行並不改變數據庫中數據的一致性.例如,完整性約束了a+b=10,一個事務改變了a,那麼b也應該隨之改變.
事務的獨立性:是指兩個以上的事務不會出現交錯執行的狀態.因爲這樣可能會導致數據不一致.
事務的持久性:是指事務運行成功以後,就係統的更新是永久的.不會無緣無故的回滾.
三、 事務併發時可能出現問題
1、第一類丟失更新(Lost Update)
時間 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|