解釋:
for update是在數(shù)據(jù)庫中上鎖用的,可以為數(shù)據(jù)庫中的行上一個排它鎖激涤。當一個事務的操作未完成時候席揽,其他事務可以讀取但是不能寫入或更新。
例子:
比如一張表三個字段 皱碘, id(商品id), name(商品名字) , count(數(shù)量)
當商品搶購時候會顯示剩余商品件數(shù),如果并發(fā)量大的時候衡未,商品自減的值可能不準確尸执。所以當我們在一個事務中對count字段進行修改的時候,其他事務應該只能讀取指定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;
此時如果另一個事務也想執(zhí)行類似的操作:
start transaction ;
select * from table_name where id =1 for update ;
//下面的這行sql會等待,直到上面的事務回滾或者commit才得到執(zhí)行。
update table_name set count = count - 1 where id= 1;
*注:當選中某一個行的時候,如果是通過主鍵id選中的绊诲。那么這個時候是行級鎖送粱。
其他的行還是可以直接insert 或者update的。如果是通過其他的方式選中行,或者選中的條件不明確包含主鍵掂之。這個時候會鎖表抗俄。其他的事務對該表的任意一行記錄都無法進行插入或者更新操作脆丁。只能讀取。
---------------------
作者:宇宙意志
來源:CSDN
原文:https://blog.csdn.net/qq_39632561/article/details/80061364
版權聲明:本文為博主原創(chuàng)文章动雹,轉載請附上博文鏈接槽卫!