Giriş
Açıklaması şöyle
READPAST skips through rows that are locked for update by other transactions but ONLY when the query you execute is about to get blocked on locked rows. So READPAST doesn’t skip locked rows on normal select queries because it can read from a snapshot (MVCC)
Örnek
Tabloda 1,2,3,4,5 satırları olsun. Şöyle yaparız
-- run transaction 1 and don’t commit;BEGIN TRANSACTION;UPDATE T SET F = 100 WHERE F = 1-- in another transaction doSELECT * FROM T WITH (READPAST)
Burada sonuç olarak 2,3,4,5 alırız. 1 numaralı satır atlandı
Şöyle yaparız
BEGIN TRANSACTION;UPDATE T WITH (READPAST) SET F = 900 WHERE F < 10;
Burada 2,3,4,5 numaralı satırla güncellenir ama 1 numaralı satır atlanır. Aynı şeyi şöyle de yapabiliriz
BEGIN TRANSACTION; UPDATE T SET F = 900 WHERE F IN( SELECT F FROM T WITH READPAST WHERE F < 10)
Ama şöyle yapsaydık bloke olurdu. Çünkü WITH READPAST kullanılmadı
BEGIN TRANSACTION; UPDATE T SET F = 900 WHERE F < 10;