SQL Server'da İşlemler ve Hata Yönetimi
Miriam Antona
Software Engineer
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
| Kirli okumalar | Tekrar edilemeyen okumalar | Hayalet okumalar | |
|---|---|---|---|
| READ UNCOMMITTED | evet | evet | evet |
| READ COMMITTED | hayır | evet | evet |
| REPEATABLE READ | hayır | hayır | evet |
| SERIALIZABLE | hayır | hayır | hayır |
WHERE koşullu sorgu -> Yalnızca o kayıtları kilitlerİşlem 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
SELECT * FROM customers
WHERE customer_id BETWEEN 1 AND 3;
| customer_id | first_name | last_name | ... | phone |
|-------------|------------|-----------|-----|-----------|
| 1 | Dylan | Smith | ... | 555888999 |
Kilitli kayıt
İşlem 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
SELECT * FROM customers
WHERE customer_id BETWEEN 1 AND 3;
| customer_id | first_name | last_name | ... | phone |
|-------------|------------|-----------|-----|-----------|
| 1 | Dylan | Smith | ... | 555888999 |
Kilitli kayıt
İşlem 2
...
...
INSERT INTO customers (customer_id, first_name, ...)
VALUES (2, 'Phantom', 'Ph', '[email protected]', 555666222);
Beklemek zorunda!
İşlem 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
SELECT * FROM customers
WHERE customer_id BETWEEN 1 AND 3;

SELECT * FROM customers
WHERE customer_id BETWEEN 1 AND 3;
| customer_id | first_name | last_name | ... | phone |
|-------------|------------|-----------|-----|-----------|
| 1 | Dylan | Smith | ... | 555888999 |
İşlem 2
...
...
INSERT INTO customers (customer_id, first_name, ...)
VALUES (2, 'Phantom', 'Ph', '[email protected]', 555666222);
Beklemek zorunda!
İşlem 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
SELECT * FROM customers
WHERE customer_id BETWEEN 1 AND 3;

SELECT * FROM customers
WHERE customer_id BETWEEN 1 AND 3;
COMMIT TRAN
İşlem 2
...
...
INSERT INTO customers (customer_id, first_name, ...)
VALUES (2, 'Phantom', 'Ph', '[email protected]', 555666222);
Akhirinde çalıştı!
İşlem 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
SELECT * FROM customers
WHERE customer_id BETWEEN 1 AND 3;
| customer_id | first_name | last_name | ... | phone |
|-------------|------------|-----------|-----|-----------|
| 1 | Dylan | Smith | ... | 555888999 |
İşlem 2
...
...
INSERT INTO customers (customer_id, first_name, ...)
VALUES (200, 'Phantom', 'Ph', '[email protected]', 555666222);
Anında eklendi!
İşlem 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
SELECT * FROM customers;
| customer_id | first_name | last_name | ... | phone |
|-------------|------------|-----------| ... |-----------|
| 1 | Dylan | Smith | ... | 555888999 |
...
| 10 | Carol | York | ... | 555148988 |
Tüm tabloyu kilitler
İşlem 2
...
...
INSERT INTO customers
VALUES (100, 'Phantom', 'Ph', '[email protected]', 555666222);
Beklemek zorunda!
İşlem 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
SELECT * FROM customers;

SELECT * FROM customers;
| customer_id | first_name | last_name | ... | phone |
|-------------|------------|-----------| ... |-----------|
| 1 | Dylan | Smith | ... | 555888999 |
...
| 10 | Carol | York | ... | 555148988 |
İşlem 2
...
...
INSERT INTO customers
VALUES (100, 'Phantom', 'Ph', '[email protected]', 555666222);
Beklemek zorunda!
İşlem 1
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE
BEGIN TRAN
SELECT * FROM customers;

SELECT * FROM customers;
COMMIT TRAN
İşlem 2
...
...
INSERT INTO customers
VALUES (100, 'Phantom', 'Ph', '[email protected]', 555666222);
Akhirinde çalıştı!
Artılar:
Eksiler:
SERIALIZABLE bir işlem tarafından engellenebilirsinizNe zaman kullanılır?:
SQL Server'da İşlemler ve Hata Yönetimi