共計 1289 個字符,預(yù)計需要花費 4 分鐘才能閱讀完成。
這篇文章主要介紹“mysql 中的 for update 怎么用”的相關(guān)知識,丸趣 TV 小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“mysql 中的 for update 怎么用”文章能幫助大家解決問題。
mysql 中 for update 的用法是“select * from table where…for update”;用 for update 可以在查詢的時候為行添加排它鎖,當一個事務(wù)操作未完成的時候,其他事務(wù)可讀取但是不能寫入或者更新。
本教程操作環(huán)境:windows10 系統(tǒng)、mysql8.0.22 版本、Dell G3 電腦。
mysql 中 for update 的用法是什么
1.for update 的使用場景
如果遇到存在高并發(fā)并且對于數(shù)據(jù)的準確性很有要求的場景,是需要了解和使用 for update 的。
for update 的作用是在查詢的時候為行加上排它鎖,當一個事務(wù)的操作未完成時候,其他事務(wù)可以讀取但是不能寫入或更新。
比如涉及到金錢、庫存等。一般這些操作都是很長一串并且是開啟事務(wù)的。如果庫存剛開始讀的時候是 1,而立馬另一個進程進行了 update 將庫存更新為 0 了,而事務(wù)還沒有結(jié)束,會將錯的數(shù)據(jù)一直執(zhí)行下去,就會有問題。所以需要 for upate 進行數(shù)據(jù)加鎖防止高并發(fā)時候數(shù)據(jù)出錯。
記住一個原則:一鎖二判三更新
2.for update 如何使用
使用姿勢:
select * from table where xxx for update
3.for update 的鎖表
InnoDB 默認是行級別的鎖,當有明確指定的主鍵時候,是行級鎖。否則是表級別。
例子: 假設(shè)表 foods,存在有 id 跟 name、status 三個字段,id 是主鍵,status 有索引。
例 1: (明確指定主鍵,并且有此記錄,行級鎖)
SELECT * FROM foods WHERE id=1 FOR UPDATE;
SELECT * FROM foods WHERE id=1 and name=‘碼農(nóng)編程進階筆記’ FOR UPDATE;
例 2: (明確指定主鍵 / 索引,若查無此記錄,無鎖)
SELECT * FROM foods WHERE id=-1 FOR UPDATE;
例 3: (無主鍵 / 索引,表級鎖)
SELECT * FROM foods WHERE name=‘碼農(nóng)編程進階筆記’FOR UPDATE;
例 4: (主鍵 / 索引不明確,表級鎖)
SELECT * FROM foods WHERE id‘3’ FOR UPDATE;
SELECT * FROM foods WHERE id LIKE ‘3’ FOR UPDATE;
4.for update 的注意點
1.for update 僅適用于 InnoDB,并且必須開啟事務(wù),在 begin 與 commit 之間才生效。
2. 要測試 for update 的鎖表情況,可以利用 MySQL 的 Command Mode,開啟二個視窗來做測試。
關(guān)于“mysql 中的 for update 怎么用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識,可以關(guān)注丸趣 TV 行業(yè)資訊頻道,丸趣 TV 小編每天都會為大家更新不同的知識點。