sql中的for update

解釋:

for update是在數(shù)據(jù)庫中上鎖用的,可以為數(shù)據(jù)庫中的行上一個排它鎖。當一個事務(wù)的操作未完成時候,其他事務(wù)可以讀取但是不能寫入或更新。

例子:

比如一張表三個字段 , id(商品id), name(商品名字) , count(數(shù)量)

當商品搶購時候會顯示剩余商品件數(shù),如果并發(fā)量大的時候,商品自減的值可能不準確。所以當我們在一個事務(wù)中對count字段進行修改的時候,其他事務(wù)應(yīng)該只能讀取指定id的count,而不能進行update等操作。這個時候就需要用到for update.

sql語句:

start transaction ;

select * from table_name where id =1 for update ;

update table_name set count = count - 1 where id= 1;

此時如果另一個事務(wù)也想執(zhí)行類似的操作:

start transaction ;

select * from table_name where id =1 for update ;

//下面的這行sql會等待,直到上面的事務(wù)回滾或者commit才得到執(zhí)行。

update table_name set count = count - 1 where id= 1;

*注:當選中某一個行的時候,如果是通過主鍵id選中的。那么這個時候是行級鎖。

其他的行還是可以直接insert 或者update的。如果是通過其他的方式選中行,或者選中的條件不明確包含主鍵。這個時候會鎖表。其他的事務(wù)對該表的任意一行記錄都無法進行插入或者更新操作。只能讀取。

---------------------

作者:宇宙意志

來源:CSDN

原文:https://blog.csdn.net/qq_39632561/article/details/80061364

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請附上博文鏈接!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容