PostgreSQL - İŞLEMLER
İşlem, bir veri tabanına karşı gerçekleştirilen bir iş birimidir. İşlemler, bir kullanıcı tarafından manuel olarak veya bir tür veritabanı programı tarafından otomatik olarak mantıksal bir sırada gerçekleştirilen birimler veya iş dizileridir.
Bir işlem, bir veya daha fazla değişikliğin veritabanına yayılmasıdır. Örneğin, bir kayıt oluşturuyorsanız, bir kaydı güncelliyorsanız veya tablodan bir kaydı siliyorsanız, o zaman tablo üzerinde işlem yapıyorsunuz demektir. Veri bütünlüğünü sağlamak ve veritabanı hatalarını işlemek için işlemleri kontrol etmek önemlidir.
Pratik olarak, birçok PostgreSQL sorgusunu bir grupta toplayacaksınız ve hepsini bir işlemin parçası olarak birlikte yürüteceksiniz.
İşlemlerin Özellikleri
İşlemler, genellikle ACID kısaltmasıyla anılan aşağıdaki dört standart özelliğe sahiptir -
Atomicity- İş birimindeki tüm işlemlerin başarıyla tamamlanmasını sağlar; aksi takdirde, işlem başarısızlık noktasında iptal edilir ve önceki işlemler önceki durumuna geri döndürülür.
Consistency - Veritabanının başarıyla tamamlanmış bir işlemden sonra durumları doğru şekilde değiştirmesini sağlar.
Isolation - İşlemlerin birbirinden bağımsız ve şeffaf bir şekilde işlemesini sağlar.
Durability - Bir sistem arızası durumunda taahhüt edilen bir işlemin sonucunun veya etkisinin devam etmesini sağlar.
İşlem Kontrolü
İşlemleri kontrol etmek için aşağıdaki komutlar kullanılır -
BEGIN TRANSACTION - Bir işlem başlatmak için.
COMMIT - Değişiklikleri kaydetmek için alternatif olarak kullanabilirsiniz END TRANSACTION komut.
ROLLBACK - Değişiklikleri geri almak için.
İşlem kontrol komutları yalnızca INSERT, UPDATE ve DELETE DML komutlarıyla kullanılır. Tablolar oluşturulurken veya bırakılırken kullanılamazlar çünkü bu işlemler veritabanına otomatik olarak kaydedilir.
BEGIN TRANSACTION Komutu
İşlemler, BEGIN TRANSACTION veya basitçe BEGIN komutu kullanılarak başlatılabilir. Bu tür işlemler genellikle bir sonraki COMMIT veya ROLLBACK komutuyla karşılaşılana kadar devam eder. Ancak, veritabanı kapatılırsa veya bir hata oluşursa bir işlem de GERİ DÖNÜŞÜR.
Bir işlemi başlatmak için basit sözdizimi aşağıdadır -
BEGIN;
or
BEGIN TRANSACTION;
COMMIT Komutu
COMMIT komutu, bir işlem tarafından çağrılan değişiklikleri veritabanına kaydetmek için kullanılan işlem komutudur.
COMMIT komutu, son COMMIT veya ROLLBACK komutundan itibaren tüm işlemleri veritabanına kaydeder.
COMMIT komutunun sözdizimi aşağıdaki gibidir -
COMMIT;
or
END TRANSACTION;
ROLLBACK Komutu
ROLLBACK komutu, veritabanına önceden kaydedilmemiş işlemleri geri almak için kullanılan işlem komutudur.
ROLLBACK komutu, yalnızca son COMMIT veya ROLLBACK komutu verildiğinden beri işlemleri geri almak için kullanılabilir.
ROLLBACK komutunun sözdizimi aşağıdaki gibidir -
ROLLBACK;
Misal
ŞİRKET tablosunun aşağıdaki kayıtlara sahip olduğunu düşünün -
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
Şimdi bir işleme başlayalım ve yaş = 25 olan tablodaki kayıtları silelim ve son olarak tüm değişiklikleri geri almak için ROLLBACK komutunu kullanalım.
testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
ROLLBACK;
ŞİRKET tablosunun hala aşağıdaki kayıtlara sahip olup olmadığını kontrol ederseniz -
id | name | age | address | salary
----+-------+-----+-----------+--------
1 | Paul | 32 | California| 20000
2 | Allen | 25 | Texas | 15000
3 | Teddy | 23 | Norway | 20000
4 | Mark | 25 | Rich-Mond | 65000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall| 45000
7 | James | 24 | Houston | 10000
Şimdi başka bir işleme başlayalım ve yaş = 25 olan tablodaki kayıtları silelim ve son olarak tüm değişiklikleri işlemek için COMMIT komutunu kullanalım.
testdb=# BEGIN;
DELETE FROM COMPANY WHERE AGE = 25;
COMMIT;
ŞİRKET tablosunu kontrol ederseniz, hala aşağıdaki kayıtlara sahiptir -
id | name | age | address | salary
----+-------+-----+------------+--------
1 | Paul | 32 | California | 20000
3 | Teddy | 23 | Norway | 20000
5 | David | 27 | Texas | 85000
6 | Kim | 22 | South-Hall | 45000
7 | James | 24 | Houston | 10000
(5 rows)