sql如下:
update pay_trans
set return_state = 1
where
order_id = #
and user_id = #
批量執行此條sql時,導致資料表被鎖,所有交易異常。
經排查where條件order_id and user_id 沒有加索引,導致整個表被鎖。
mysql的行鎖是通過索引載入的,即是行鎖是加在索引響應的行上的,要是對應的sql語句沒有走索引,則會全表掃瞄,
行鎖則無法實現,取而代之的是表鎖。
簡而言之:where條件裡面,不加索引時,update會使用「表鎖」進行更新,影響所有行的查詢更新;
加了索引後,使用「行鎖」進行udpate,只鎖當前行。不影響其他行的查詢更新。
MySql批量更新語句(UPDATE)
下面建立乙個名為 bhl tes 的資料庫,並建立名為 test user 的表,字段分別為 id age name create database ifnot exists bhl test 檢視結果 檢視結果 張三 18 男 趙四 17 女 劉五 16 男 周七 19 女 檢視結果 張三 whe...
mysql 批量更新 MySQL批量更新
我有2個表 mysql data details accounts invoices 理想情況下,每個data details都應具有accounts invoices id.data details有乙個帶有accounts invoices主鍵的外來鍵 由於某種原因,有data details記...
mysql批量update資料優化
有一張表goods中有20w條資料,現在需要把某個欄位的值做md5加密後更新。一條一條迴圈更新效能差不說,還容易造成資料庫阻塞。set time limit 0 ini set memory limit 1g mysqli new mysqli 127.0.0.1 root root wx 3306...