mysql批量更新update操作,導致鎖表

2021-08-15 12:26:35 字數 418 閱讀 3155

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...