Ana içeriğe atla

NOLOCK, READPAST ve READUNCOMMITED

MS SQL’de NOLOCK, READPAST ve READUNCOMMITED komutları ve kullanımı

NOLOCK: Kendisi üzerinde değişiklik yapılan tabloda, yapılan değişiklikler henüz tamamlanmamış da olsa(TRANSACTION sonlandırılmamış da olsa). İlgili kayıtlar sanki işlemler tamamlanmış gibi elde edilebilir.

READPAST: Tabloda yapılan değişiklikler göz önünde bulundurulur ancak sadece üzerinde TRANSACTION sürecinde kilit bulunmayan kayıtlar elde edilebilir. Tüm kayıtların elde edilebilmesi için başlatılan TRANSACTION sürecinin sonlandırılmış olması yani sql deyimi ile COMMIT edilmiş olması gerekmektedir.

READUNCOMMITED: NOLOCK ile aynı özelliklere sahiptir.
 
CREATE TABLE Table_1
(
      ID        INTEGER IDENTITY(1, 1) NOT NULL,
      ACIKLAMA  VARCHAR(100) NULL
)
 
GO
 
 
CREATE TABLE Table_2
(
      ID        INTEGER IDENTITY(1, 1) NOT NULL,
      ACIKLAMA  VARCHAR(100) NULL
)
 
GO
 
CREATE VIEW View_1
AS
SELECT * FROM Table_1 T1
UNION ALL
SELECT * FROM Table_2 T2
 
GO
 
CREATE VIEW View_2
AS
SELECT * FROM View_1 V1
UNION ALL
SELECT * FROM Table_2 T1
 
GO
--1. Tabloya test için eklenen kayıtlar
INSERT INTO Table_1(ACIKLAMA) VALUES('A1')
INSERT INTO Table_1(ACIKLAMA) VALUES('A2')
INSERT INTO Table_1(ACIKLAMA) VALUES('A3')
INSERT INTO Table_1(ACIKLAMA) VALUES('A4')
 
GO
--2. Tabloya test için eklenen kayıtlar
INSERT INTO Table_2(ACIKLAMA) VALUES('B1')
INSERT INTO Table_2(ACIKLAMA) VALUES('B2')
INSERT INTO Table_2(ACIKLAMA) VALUES('B3')
 
GO
 
--Transaction başlatılır ve 1. Tablo üzerinde yeni kayıt ekleme ve güncelleme işlemlerinin yapılması sayesinde tablonun kilitlenmesi(LOCK) sağlanır.
 
BEGIN TRAN
 
INSERT INTO Table_1(ACIKLAMA) VALUES('A5')
 
UPDATE Table_1 SET ACIKLAMA = 'A2_2' WHERE  ID = 2
 
 
SELECT * FROM   View_1 à Test1 tablosunda lock(kilit) olduğu için sonuç dönmeyecek 
 
SELECT * FROM   View_1(NOLOCK) à View'ın içerisindeki tablolar için de TRANSACTION ISOLATION LEVEL değerini READ COMMITTED olarak değiştirileceği için sonuç gelecektir. Gelen sonuç INSERT ve UPDATE işlemleri gerçekleştirilmiş gibi hesaplanır.
 
SELECT * FROM   View_1(READPAST) à READPAST komutu ile tablodaki görüntülemek istediğinizde üzerinde değişiklik yapılmakta olan ve TRANSACTION işlemi henüz onaylanmamış olan kayıtlar listelenmeyecektir. Dikkat edilirse 1. Tablodaki ID değeri 2 olan kayıt güncellenmeye çalışılmaktadır ve AÇIKLAMA alanı A5 olarak kaydedilmeye çalışılan kayıt üzerinde de henüz onaylanmadığı(COMMIT) için ve kilit(LOCK) bulunduğu için listelenmeyecektir.
 

Yorumlar

Bu blogdaki popüler yayınlar

NULL Değerler

NULL Değerler Veri girişi esnasında, alana herhangi bir değer yazılmazsa ve alan için herhangi bir varsayılan (default) değer atanmamışsa alanda boş (null) değeri saklanır.   Null değeri boşluk (‘ ‘) veya sıfır (0) değerinden farklıdır.   Belirli bir alanına hiçbir değer girilmemiş kayıtları listelemek için IS NULL arama kriteri kullanılır.  Bir tablodaki hangi alanların varsayılan değerleri olacağına veya alanın NULL değere izin verip vermediğine, tablo tasarımı sırasında karar verilir.   Eğer boş olmayan satırları listelemek gerektiğinde IS NOT NULL arama kriterini kullanılır.  Sorgu:  SELECT CompanyName,City,Fax FROM Suppliers WHERE Fax IS NULL SELECT CompanyName,City,Fax FROM Suppliers WHERE Fax IS NOT NULL KAYNAK: http://sqltr.blogspot.com.tr/2012/03/11-null-degerler.html

HAKKIMDA

Yaklaşık 10 yıldır yazılım sektöründeyim. Kod yazarken kaynakları okuyup anlayıp sentezleyip dönüştürüp  kullanıyorsunuz. Ben de bu blog da hakkında bilgi sahibi olduğum , temiz ve net anlatımlı makalelere yer vereceğim. Kaynak kısmında aldığım linkler yer almaktadır. Ziyaret ettiğiniz için teşekkür ederim. Semra Özbakır