iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0
Modern Web

MySQL,我的超人系列 第 15

Day15-MySQL的併發(Concurrency)-更新丟失Lost Updates、樂觀&悲觀鎖

  • 分享至 

  • xImage
  •  

前言

Day14-髒讀中簡單演示了隔離級別被設定為可讀為提交READ UNCOMMITTED時會出現的併發問題,不過之所以要特別設置隔離等級,是因為大多數的MySQL預設隔離等級是設為可重複讀REPEATABLE-READ,用下方的指令可以快速查詢目前的隔離等級;

SELECT @@TX_ISOLATION

樂觀鎖Pessimistic locking & 悲觀鎖Optimistic locking

樂觀鎖

1.時機:更新不頻繁時
2.其他人可讀,更新數據時,如果交易進行中被其他人更新,此次交易失敗回滾

悲觀鎖

1.時機:大量更新
2.每次讀寫數據,其他人都不能讀寫

更新丟失Lost Updates

如何發生?

1.資料未上鎖
2.兩個交易同時發生

結果

晚提交的交易覆蓋早提交的交易,資料不正確

https://ithelp.ithome.com.tw/upload/images/20220929/20144865trEdLRu545.jpg

雜談

今天要從資料庫連結三張表,其中一張表還要分組後取各組最新的資料,看到這需求差點沒吐血,有夠麻煩不過也很有挑戰性,在實現功能時就開始考慮要用ORM還是Raw SQL來寫,但後來想想還是用SQL寫最快,畢竟我可不想花一堆時間查ORM的文件,選ORM我還是得用SQL在DB寫一次才能確保抓出來的資料是對的,等於多此一舉,最後花了1小時寫出來,還蠻有成就感的。
還有查文件時發現,中文簡體的網站品質普遍不高,大部分都是某對岸作者從S網照抄翻譯過來後(不附原文連結那種),再被其他人抄或是直接被爬蟲整包扒走,一個我抄襲你的抄襲的概念...,最機車的是每個都是'登陸後可複製',阿人家S網都寫好寫滿,被你抄走就不能複製,無言


上一篇
Day14-MySQL的併發(Concurrency)-髒讀Dirty Reads、排他鎖、共享鎖
下一篇
Day16-番外篇-PHP後端連到MYSQL花生了甚麼事?瀏覽器、伺服器????
系列文
MySQL,我的超人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言