mysql中update語句的鎖


UPDATE rent_contacts SET contacts_mobile='11111' WHERE  rent_unit_code in (SELECT rent_unit_code FROM  rent_unit  );

第一種情況:  條件無索引

sql一執行:

BEGIN;

UPDATE contacts SET mobile='11111' WHERE  code in ('3424342' );

sql二執行 UPDATE contacts SET mobile='11111' WHERE  code in ('1111' );

sql二執行受阻,sql一commit之后,sql二可執行成功

結論:條件無索引,鎖表

 

第二種情況: 條件有索引,in語句是確定的值

sql一執行:

BEGIN;

UPDATE contacts SET mobile='11111' WHERE  code in ('3424342' );

sql二執行 UPDATE contacts SET mobile='11111' WHERE  code in ('1111' );

sql二正常執行,sql二不依賴sql一的commit

結論:條件有索引,鎖行

 

 

第三種情況: 條件有索引,in語句是復雜查詢

sql一執行:

BEGIN;

UPDATE contacts SET mobile='11111' WHERE  code in ( select code from user where id=1);

sql二執行 UPDATE contacts SET mobile='11111' WHERE  code in ('1111' );

sql二執行受阻,sql一commit,sql二正常執行

結論:條件有索引,in語句是不確定的值,鎖表

 


免責聲明!

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



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