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

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

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是不容許的。sql

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不受影響。spa

相關文章
相關標籤/搜索