<noframes id="7xbfr"><pre id="7xbfr"><output id="7xbfr"></output></pre>

      <big id="7xbfr"><font id="7xbfr"><listing id="7xbfr"></listing></font></big>
        <p id="7xbfr"></p>
        <menuitem id="7xbfr"></menuitem>

          <video id="7xbfr"><mark id="7xbfr"><listing id="7xbfr"></listing></mark></video>
            <form id="7xbfr"></form>

          <delect id="7xbfr"><var id="7xbfr"></var></delect>

          sql中的for update

          時間:2020-09-26 00:11:32 類型:數據庫
          字號:    

          解釋:

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

          例子:

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

          當商品搶購時候會顯示剩余商品件數,如果并發量大的時候,商品自減的值可能不準確。所以當我們在一個事務中對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;

          此時如果另一個事務也想執行類似的操作:

          start transaction ;

          select * from table_name where id =1 for update ;

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

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

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

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



          作者:林偉成
          鏈接:https://www.jianshu.com/p/aaee995176ba
          來源:簡書
          著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。


          黄网站免费 <