SQL - İş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 veya bir kaydı güncelliyorsanız veya tablodan bir kaydı siliyorsanız, o tablo üzerinde bir işlem gerçekleştiriyorsunuzdur. Veri bütünlüğünü sağlamak ve veritabanı hatalarını işlemek için bu işlemleri kontrol etmek önemlidir.

Pratik olarak, birçok SQL sorgusunu bir grupta toplayacaksınız ve hepsini bir işlemin parçası olarak birlikte yürüteceksiniz.

İşlemlerin Özellikleri

İşlemler, genellikle kısaltmayla anılan aşağıdaki dört standart özelliğe sahiptir. ACID.

  • 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 tüm işlemler önceki durumuna geri döndürülür.

  • Consistency - başarıyla tamamlanmış bir işlemden sonra veritabanının 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.

  • COMMIT - değişiklikleri kaydetmek için.

  • ROLLBACK - değişiklikleri geri almak için.

  • SAVEPOINT - ROLLBACK'in yapılacağı işlem grupları içinde noktalar oluşturur.

  • SET TRANSACTION - Bir işleme bir ad verir.

İşlem Kontrol Komutları

İşlem kontrol komutları yalnızca DML Commandsörneğin - INSERT, UPDATE ve DELETE gibi. Tablolar oluşturulurken veya bırakılırken kullanılamazlar çünkü bu işlemler veritabanına otomatik olarak kaydedilir.

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, 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;

Example

Aşağıdaki kayıtlara sahip MÜŞTERİLER tablosunu düşünün -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Aşağıda yaş = 25 olan bu kayıtları tablodan silen ve ardından veritabanındaki değişiklikleri TAMAMLAYACAK bir örnek verilmiştir.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> COMMIT;

Bu nedenle, tablodan iki satır silinecek ve SELECT ifadesi aşağıdaki sonucu verecektir.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

ROLLBACK Komutu

ROLLBACK komutu, veritabanına önceden kaydedilmemiş işlemleri geri almak için kullanılan işlem komutudur. Bu komut yalnızca son COMMIT veya ROLLBACK komutunun verildiği tarihten itibaren işlemleri geri almak için kullanılabilir.

Bir ROLLBACK komutunun sözdizimi aşağıdaki gibidir -

ROLLBACK;

Example

Aşağıdaki kayıtlara sahip MÜŞTERİLER tablosunu düşünün -

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Aşağıda, yaş = 25 olan bu kayıtları tablodan silen ve ardından veritabanındaki değişiklikleri ROLLBACK silen bir örnek verilmiştir.

SQL> DELETE FROM CUSTOMERS
   WHERE AGE = 25;
SQL> ROLLBACK;

Bu nedenle, silme işlemi tabloyu etkilemez ve SELECT deyimi aşağıdaki sonucu verir.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

SAVEPOINT Komutu

SAVEPOINT, işlemin tamamını geri almadan işlemi belirli bir noktaya geri alabileceğiniz bir işlemdir.

SAVEPOINT komutunun sözdizimi aşağıda gösterildiği gibidir.

SAVEPOINT SAVEPOINT_NAME;

Bu komut, yalnızca tüm işlem ifadeleri arasında bir SAVEPOINT oluşturulmasına hizmet eder. ROLLBACK komutu, bir grup işlemi geri almak için kullanılır.

SAVEPOINT'e geri dönmenin sözdizimi aşağıda gösterildiği gibidir.

ROLLBACK TO SAVEPOINT_NAME;

Aşağıda, MÜŞTERİLER tablosundan üç farklı kaydı silmeyi planladığınız bir örnek verilmiştir. Her silme işleminden önce bir SAVEPOINT oluşturmak istersiniz, böylece uygun verileri orijinal durumuna geri döndürmek için herhangi bir zamanda herhangi bir SAVEPOINT'e GERİ DÖNÜŞEBİLİRSİNİZ.

Example

Aşağıdaki kayıtlara sahip MÜŞTERİLER tablosunu düşünün.

+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  1 | Ramesh   |  32 | Ahmedabad |  2000.00 |
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+

Aşağıdaki kod bloğu, işlem serilerini içerir.

SQL> SAVEPOINT SP1;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=1;
1 row deleted.
SQL> SAVEPOINT SP2;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=2;
1 row deleted.
SQL> SAVEPOINT SP3;
Savepoint created.
SQL> DELETE FROM CUSTOMERS WHERE ID=3;
1 row deleted.

Şimdi üç silme işlemi gerçekleştiğine göre, fikrinizi değiştirdiğinizi ve SP2 olarak tanımladığınız SAVEPOINT'e ROLLBACK yapmaya karar verdiğinizi varsayalım. SP2 ilk silme işleminden sonra oluşturulduğundan, son iki silme işlemi geri alınır -

SQL> ROLLBACK TO SP2;
Rollback complete.

SP2'ye geri döndüğünüzden beri yalnızca ilk silme işleminin gerçekleştiğine dikkat edin.

SQL> SELECT * FROM CUSTOMERS;
+----+----------+-----+-----------+----------+
| ID | NAME     | AGE | ADDRESS   | SALARY   |
+----+----------+-----+-----------+----------+
|  2 | Khilan   |  25 | Delhi     |  1500.00 |
|  3 | kaushik  |  23 | Kota      |  2000.00 |
|  4 | Chaitali |  25 | Mumbai    |  6500.00 |
|  5 | Hardik   |  27 | Bhopal    |  8500.00 |
|  6 | Komal    |  22 | MP        |  4500.00 |
|  7 | Muffy    |  24 | Indore    | 10000.00 |
+----+----------+-----+-----------+----------+
6 rows selected.

RELEASE SAVEPOINT Komutu

RELEASE SAVEPOINT komutu, oluşturduğunuz bir SAVEPOINT'i kaldırmak için kullanılır.

RELEASE SAVEPOINT komutunun sözdizimi aşağıdaki gibidir.

RELEASE SAVEPOINT SAVEPOINT_NAME;

Bir SAVEPOINT serbest bırakıldıktan sonra, son SAVEPOINT'ten bu yana gerçekleştirilen işlemleri geri almak için artık ROLLBACK komutunu kullanamazsınız.

SET TRANSACTION Komutu

SET TRANSACTION komutu, bir veritabanı işlemini başlatmak için kullanılabilir. Bu komut, takip eden işlemin özelliklerini belirlemek için kullanılır. Örneğin, salt okunur veya okunabilir bir işlem belirtebilirsiniz.

SET TRANSACTION komutunun sözdizimi aşağıdaki gibidir.

SET TRANSACTION [ READ WRITE | READ ONLY ];