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語句是不確定的值,鎖表