mysql批量更新update中的鎖表機制


mysql的行鎖是通過索引加載的,即行鎖是加在索引響應的行上的,要是對應的SQL語句沒有走索引,則會全表掃描,行鎖則無法實現,取而代之的是表鎖。

CREATE TABLE SIMPLE_USER(
    ID BIGINT (20) NOT NULL AUTO_INCREMENT,
    NAME VARCHAR (32) DEFAULT NULL,
    PHONE VARCHAR (11) DEFAULT NULL,
    ADDRESS VARCHAR (32) DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE = INNODB AUTO_INCREMENT = 1 DEFAULT CHARSET = utf8;

如上面的建表語句,當執行如下update語句時,數據庫對該表施加的是表鎖。即在該update執行完之前,所有對該表的update是不允許的。

UPDATE SIMPLE_USER SET ADDRESS='David Road' WHERE NAME='David';

當對 WHERE 條件的字段添加索引,如本例中的NAME字段,

ALTER TABLE SIMPLE_USER ADD INDEX idx_name(NAME);

再執行上面update語句時,數據庫對該表施加的是行鎖,此時僅對NAME='David'的行的update是不允許的,對 NAME<>'David' 的行的update不受影響。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM