VERİTABANI SİSTEMLERİ - Ünite 7: Veri İşleme Özeti :

PAYLAŞ:

Ünite 7: Veri İşleme

Giriş

Veritabanı Sistemleri, Word, Excel ya da PowerPoint gibi ofis yazılımlarının dosya yapısından farklı olarak birlikte çalışması gereken nesnelerin (tablo, görünüm, indeks, saklı yordam vb.) oluşturduğu bir topluluktur. Bahsedilen tüm bu nesnelerin birbiri ile uyumlu ve düzgün çalışabilmesi için bir takım tasarım ilkelerine uyması gerekmektedir. Bu tasarım ilkelerinin kötü tasarlanması veya tasarım kurallarına uyulmaması hâlinde problemlerle karşılaşılması kaçınılmaz olur ve başarısız veya tümüyle işe yaramayan veritabanı uygulamaları ortaya çıkabilir. Veritabanı tasarımı yapılırken sadece tablolar ve tablolar arasındaki bağlantıların nasıl olacağına karar verilmez. Hangi tablonun hangi amaçla kullanılacağı önemlidir.

Verilerin tablolara eklenmesi tabloların tasarımı ile yakından ilişkilidir. Her tablo bir kullanım amacıyla oluşturulurken tablodaki alanların her biri yalnızca bir tür veri kabul edecek şekilde tanımlanmalıdır. Eğer rakam girilecek bir şekilde tasarlanmış bir alana metin girilmesi hâlinde veritabanı hata mesajı üretecektir. Bu sayede her alan için yanlış bilgilerin girilmesini engellemek mümkündür. Genelde veritabanı tasarımı yapılırken bir tablodaki alanların her biri yalnızca bir tür veri kabul eder. Ancak bu katı, değişmez bir kural değildir.

Bir veritabanına veri girmenin temel olarak iki yolu vardır. Bunlardan ilki veritabanına klavyeden kullanıcı girişi ile istenilen değerlerin girilmesidir. Bu durum veritabanı yapısının bilgi girmesi gereken kişi tarafından görülmesine neden olabilir. Ayrıca tabloların her alanı için hangi tür verinin girilmesi gerektiği bilinmelidir. Bunun yerine veritabanına veri girerken bir uygulama tarafından hazırlanacak olan veri giriş formları kullanmak daha uygun olacaktır. Veri giriş formları, veritabanına verilerin daha kolay, daha hızlı ve daha doğru girilmesini sağlayabilir. Veri giriş formları kullanılarak aynı anda bir veya birden fazla tablonun farklı alanlarına bilgi girişini sağlamak mümkün olmaktadır.

Bir veritabanı uygulamasının temel amacı kayıtların veritabanında saklanması ve bu kayıtların istenildiği zaman sorgulanabilmesidir. Ancak bazı durumlarda veritabanına girilen kayıtların silinmesi de gerekebilmektedir. Veritabanında kayıt silme işlemi iki şekilde yapılmaktadır: Bir tablodaki herhangi bir kayıtın silinmesi ikincisi de o tablodaki tüm kayıtların silinmesidir. Veritabanında bir kayıt silme işlemi gerçekleştiğinde sadece belirtilen tablodaki kayıt veya kayıtlar silinmekte yani tablo fiziksel olarak ortadan kaldırılmamaktadır.

Bazı durumlarda ise tablonun bir veya birden fazla alanındaki değerlerin değiştirilmesi gerekebilir. Değiştirilme işlemi iki şekilde yapılabilir. Bunlardan birincisi, değiştirilmek istenen ilgili kaydın tablodan silinip, değiştirilmiş olarak tüm bilgileri ile yeni kayıtın veritabanına eklenmesidir. Bu işlemi yapabilmek için ilk önce silme işlemi daha sonra ise yeni kayıt işlemi olmak üzere iki farklı işlemin yapılması gerekmektedir. Bunun yerine sadece değiştirilmek istenen kayıttaki alanın değerinin değiştirilmesi daha kolay bir işlemdir.

Veri işleme komutları kullanarak bir tabloya yeni bir kayıt eklemek, mevcut kayıt üzerinde değişiklik yapmak veya kaydı silmek tek başlarına kullanılabileceği gibi bu işlemlerin tek bir adımda arka arkaya yapılması da gerekebilir. Veri işleme komutları kullanarak tüm bahsedilen işlemler ayrı ayrı yapılabilir. Ancak tüm bu işlemler aslında tek bir işlemin alt kollarıdır ve bütün işlemlerin beraber gerçekleştirilmesi gerekmektedir. İşlemlerden bir tanesinin yapılamaması durumunda diğer işlemlerin de iptal edilmesi gerekmektedir. SQL dili arka arkaya yapılması gereken bir veya birden fazla veri işleme komutlarının hepsini tek bir işlem altında toplama imkânı vermektedir. Ayrıca grup içinde bir işlemin başarısız olması hâlinde yapılan işlemlerin geri alınabilmesini, işlemler tamamlandığı durumda ise kalıcı değişikliklerin yapılmasını sağlar.

SQL Server Management Studio Kullanımı

SQL Server Management Studio kullanılarak veritabanına klavyeden kullanıcı girişi ile istenilen değerlerin girilmesi, silinmesi veya değiştirilmesi mümkündür. Bunun için ilk önce SQL Server Management Studio’nun açılması gerekmektedir. Başlat tuşuna tıklanılarak SQL Server Management Studio’ya ulaşılıp ilgili veritabanı seçimi yapılır (s:151, Şekil 7.1).

SQL Server Management Studio programlar menüsünden çalıştırıldığı zaman ilk önce veritabanına bağlanılması için bağlama ekranı ile karşılaşılır (s:152, Şekil 7.2). Bağlama ekranında bağlanılacak veritabanının ismi (Server Name) ve Authentication seçimi yapılır. Veritabanı kendi bilgisayarımız üzerinde çalışıyor ise Windows Authentication modunda bağlama düğmesine (Connect) basılarak SQL Server Management Studio’ya bağlanma işlemi gerçekleştirilir.

Veritabanına bağlanma işleminden sonra açılan pencerenin sol tarafında Object Explorer alanında SQL Server Management Studio üzerinde yer alan veritabanları ve diğer nesneler bulunmaktadır. Burada görülen her öğenin yanında bulunan artı işaretine tıklanarak genişletme işlemi gerçeklenir. Genişletme işlemi gerçeklendiği zaman artı işareti eksi işareti hâlini alır. Eksi işaretine tıklanarak daraltma işlemi yapılabilir (s:152, Şekil 7.3). Object Explorer alanında sistemde kurulu olan tüm veritabanları, veritabanları içinde yer alan tüm tablolar ve tablolara ait olan alanlar seçim yapılarak görülebilmektedir. Bununla beraber tablodaki her alanın özelliklerini görebilme ve yetki dâhilinde değiştirebilme işlemlerini de buradan yapabilme imkânı mevcuttur (s:153, Şekil 7.4). Verileri değiştirilmesi istenen tablodaki veriler Object Explorer alanının sağ tarafında görülebilir (s:154, Şekil 7.6). Değiştirilmek istenen değer üzerine gelerek klavye ile bilgi girişi yapılır. Bilgi girişi yapıldıktan sonra Execute komutu ile değişikliklerin veritabanına aktarılması sağlanır (s:154, Şekil 7.7). Anlatılan bu işlemlerle veritabanındaki istenen bir tablonun verilerine ekleme, silme ve değiştirme işlemi yapılabilir. Ancak böyle bir yaklaşım, veritabanı yapısının bilgi girmesi gereken kişi tarafından görülmesine neden olur. Ayrıca tabloların her alanı için hangi tür verinin girilmesi gerektiği bilinmelidir. Bununla beraber farklı tablolara veri girilmesi için her tablo için aynı işlemlerin yapılması gerekmektedir. Yapılması zor olan bu işlemin yerine veritabanında kayıt ekleme, silme ve güncelleme işlemleri için DML (Data Manipulation Language) kullanılır.

Tabloya Kayıt Ekleme

Veritabanı yönetim sistemlerinde verilerin ilişkisel olarak depolandığı tablolara birçok farklı yöntemlerle veri girilebilmektedir. Klavyeden el ile veri girişi, diğer tablolardan elde edilecek veriler, dış kaynaklardan alınabilecek verilerin tablolara eklenmesi gerçekleştirilebilir. Veritabanı tablolarında her bir satır ilgili tablonun gerçek dünyada temsil varlığının bir örneğidir. Dolayısıyla bir tabloya veri ekleme yeni bir nesne, satır ya da kayıt ekleme işlemidir. Veritabanı tablolarında işlem tabloları gibi yeni sütun ekleme çok yaygın değildir. Bunun nedeni veritabanı tasarlanırken tabloda depolanacak varlığın özelliklerinin (tablonun sütunlarının) başlangıçta belirlenmesidir. Tablolara sütun (alan) ekleme veri tanımlama dilindeki ALTER komutu ile gerçekleştirilmektedir. Veritabanı tablolarına bir veya daha çok satır (kayıt) eklemek için SQL dilinde INSERT INTO deyimi kullanılır. Bu işlem “Ekleme Sorgusu” olarak adlandırılır.

Bir tabloya doğrudan veya başka tablolardan sorgulama sonucu elde edilen kayıtları eklemek için INSERT INTO komutu kullanılır. Bu komut bir tabloya istenilen değerlerin yazılarak girilmesi ya da başka bir sorgu ile elde edilen veri kümesinin girilmesi için kullanılabilir. INSERT INTO komutunun bu iki farklı işlem için yazım kuralı aşağıda verilmiştir.

-- Doğrudan veri ekleme
INSERT INTO TabloAdı [(alan1, alan2, ...)]
VALUES (değer1, değer2, ...)

-- Sorgu sonucunun tabloya eklenmesi
INSERT INTO TabloAdı [(alan1, alan2, ...)]
SELECT değer1, değer2,.. FROM Tablo

INSERT INTO komutundaki TabloAdı verinin ekleneceği tablo adını, parantez içerisindeki alan1, alan2 eklenecek tablodaki alan adlarını işaret etmektedir. Alan adlarının köşeli parantez içinde verilmesi alan adlarının mutlaka tanımlama zorunluluğu olmadığını gösterir. Ancak bu durumda tablonun tüm alanlarına sırası ile verinin girilmesi gerekir. Eklenecek değerler Values ifadesini takiben parantez içerisinde belirtilmedir. Buradaki önemli ayrıntı alan ve değerlerin eşleşmesidir. Değer1, alan1’e ve değer2, alan2’ye eklenecektir. Dolayısıyla alan sayısına eşit değerin komutta yer alması zorunludur. Değer ve alanlar virgül ile ayrılmaktadır.

Sorgu sonucunun bir tabloya eklenmesi için kullanılan komut yapısında ise VALUES yerine SELECT ile başlayan sorgu ifadesi yer almaktadır. Sadece başka bir tablodan değil kullanıcının tanımlayacağı bir veri kümesinden elde edilen sorgu sonucu ilgili tabloya eklenir. MS SQL Server’ın son yıllardaki sürümlerinde aynı sunucudaki başka veritabanından elde edilen sorgu sonuçları da tablolara eklenebilmektedir.

INTO ifadesi MS SQL Server ve birçok veritabanı yönetim sisteminde zorunlu değildir. Bu ifade bir sonraki tabloya veri girişi yapıldığını gösteren İngilizce dil yapısından gelen bir bağlaçtır.

INSERT INTO yazım kuralında da verildiği gibi öncelikle eklenmek istenilen tablo ve tablo alanları tanımlanmalıdır. Bu nedenle ilk kısımda tablonun alanları teker teker yazılır. Veritabanındaki alan adlarında Türkçe harflerin ve boşlukların bulunması alan adlarının köşeli parantez ya da çift tırnak içine alınmasını gerektirmektedir. VALUES bölümünde ise alan adları ile aynı sırada ve istenilen veri türünde tabloya eklenecek değerler yazılmalıdır. Metin ifadeler tek tırnak içerisinde belirtilmelidir. Rakamlarda ise ondalık ayraç her zaman İngilizce dil yazım kuralı nedeniyle nokta şeklinde yazılır. Tarih bilgisi de “Yıl-AyGün” biçiminde tanımlanmalıdır. Tarih ve saat gösterimleri dile bağlı olduğu için istenir ise dönüşüm sağlayan işlevler ile de kullanılabilir. Tablo adından sonra açılan parantez alan adlarından sonra kapatılmalı ve aynı şekilde Values ifadesinden sonra açılan parantez de son ifadeden sonra kapatılmalıdır.

Ekleme sorgusunun çalıştırılmasında öncelikle yeni bir sorgu ekranı oluşturularak komut yazılır ve “Execute” komutu ile çalıştırılır. Çalıştırılan komut sonrası ekranın alt bölmesinde sonuç ifadesi görüntülenir. Tabloya kayıt ekleme işleminin başarıyla sonuçlandığı “(1 row(s) affected)” ifadesiyle bildirilir. Bu işlem sonucunda tabloda 1 satırın etkilendiği bildirilir. Eğer hata ile sonuçlanırsa kırmızı renkte bir hata ifadesi ile bildirilecektir (s:156, Şekil 7.8). Ekleme komutunun bazı alan değerlerinin boş olarak kaydedilmesi NULL ifadesi ile sağlanır.

INSERT INTO ekleme sorgusunun bir seçme sorgusu ile çalışmasında dikkat edilmesi gereken konu alan sayılarının eşleşmesi ve alan içerisindeki veri türlerinin uyum göstermesidir. Bu uyum alan türünün aynı olmasında bile sağlanamayabilir. Örneğin metin türündeki iki alan, uzunlukları nedeniyle hataya sebep olabilmektedir.

Tabloya satır ekleme işlemlerinde yazım, veri tipi uyumu ve tablo alanları kısıtlayıcıları ile ilgili hatalarla karşılaşılabilinir.

SQL sorgu ifadelerinin yazımında hatalar kullanıcıya sorgu ekranındaki konumla bildirilir. Ayrıca eklenen verideki alan sayısı ile hedef tablodaki alan sayısında farklılık varsa bu hata da işlemin yapılmasını engelleyen bir hatadır ve kullanıcıya “There are more columns in the INSERT statement than values specified in the VALUES clause. The number of values in the VALUES clause must match the number of columns specified in the INSERT statement.” mesajı ile hata hakkında nerede fazla sütun alan olduğu belirtilerek düzeltilmesine yönelik bilgi sağlanır.

Tablo eklemede yaygın olarak karşılaşılan hatalardan biri de eklenen verinin türü ile eklenmek istenen tablodaki alanın türü arasındaki uyuşmazlıktır. Metin türündeki bir alana sayısal veri eklenmesi durumunda veritabanı yönetim sistemi yazılımları bu hatayı tolere edebilmektedir ancak sayısal veri türündeki bir alana metin girilmesi hata üretilmesine neden olur. Veritabanı yönetim yazılımları bu tür hataları gidermek için çeşitli yöntemler kullanırlar. Metin türündeki verinin sayıya dönüştürülmesi ve ondalıklı sayıların tam sayıya dönüştürülmesi, hataları en aza indirmek için uygulanabilmektedir. Tarih türündeki verileri veritabanı tablolarına eklemede farklı dillerde tarih yazımlarının farklı olması sorun yaratabilmektedir. Bu sorunu çözmek için tarih verisini dönüştürme ile ilgili kurallar kullanılabilir. Ancak el ile tarih bilgisi girmede ‘Yıl/Ay/Gün’ biçiminde verinin yazılması hatayı engelleyebilmektedir.

Tablolara veri ekleme SQL komutu yazarken yazım hatası ya da veri tipi uyumsuzluğunun dışında tablo alanlarında tanımlanmış kısıtlayıcılar da hatalara neden olabilmektedir. Örneğin bir alanın boş bırakılamayacağına ilişkin bir tasarım yapıldıysa veri ekleme esnasında o alanın boş bırakılamayacağı konusunda kullanıcıya hata üretilir. Ayrıca CHECK ifadesi ile oluşturulmuş alanların alması gereken değerlerin sınırları dışında bir işlem de hataya neden olabilir. Tablolar arasında tanımlanan yabancı anahtar ilişkileri de bir alana girilecek değerin farklı bir tabloda olmasına zorlayabilir. Bu durumda da kullanıcıya hata benzer bir iletiyle bildirilir.

Bu ve benzer hatalar, VALUES komutu ile gerçekleştirilen veri ekleme işlemlerinde kolayca fark edilerek çözülebilir. Ancak binlerce satır verinin başka tablolardan elde edilerek ekleme işlemlerinde bu hatalar hayli can sıkıcı olabilmektedir. Veritabanı ve tabloların yapılarını bilmek, kaynak verilerin türü ve içeriği konusunda bilgi sahibi olmak bu tür hataların çözülmesinde oldukça önemli olmaktadır.

Programlama dillerinde sıklıkla kullanılan ve belli işleri yapmak üzere tasarlanmış kod blokları işlevler olarak isimlendirilmektedir. İşlevlerin en büyük avantajı tekrarlanan işleri yapmak üzere gereksiz kod tekrarını önlemektir. Bu kapsamda veritabanına veri girerken SQL dilinin getirmiş olduğu fonksiyonları kullanabilmek de mümkündür. SQL fonksiyonları da diğer programlama dillerindeki aynı mantıkla üretilen program parçalarıdır. Fonksiyonlar temel olarak gerekli parametreleri alıp (bazı fonksiyonlar parametre almadan da kullanılacak şekilde tasarlanabilir), aldığı parametreleri kullanarak çalışır ve bulunan sonuçları geri döndürürler. SQL dilinde tanımlı birçok kategori altında çok sayıda işlev mevcuttur (s:160, Tablo 7.1).

Bu işlevlerden CAST, sorgu esnasında veri türünün dönüştürülmesini sağlar (veritabanı yapısını değiştirmez). CONVERT, CAST ile aynı işlevi gerçekleştirir. PARSE, bir ifadedeki bilgiyi ilgili dile göre metin içerisinden çıkarır. LOWER, metinleri küçük harfe çevirir. UPPER, metinleri büyük harfe çevirir. ROUND, ondalıklı bir sayının istenen basamağa yuvarlanmasını sağlar. GETDATE, SQL server yazılımının çalıştığı bilgisayarın sistem tarihini döndürür. DAY, MONTH, YEAR; tarih veri türündeki değişkenlerin sırasıyla yıl verisine dönüştüren işlevdir. Karakter türündeki değişkenlerin başındaki boşluk karakterinin kaldırılması için LTRIM, sonundaki boşluk karakterinin kaldırılması için RTRIM kullanılır.

Herhangi bir kayıt satırında ilgili sütuna hiç bir veri girilmez ise alana NULL değer atanır. Oluşturulan bir tablodaki bir veya birden fazla alana değer girilmemesi veya başka bir ifadeyle NULL değer girilmesi gerekebilir. Bunun için kullanılabilecek iki farklı yöntem mevcuttur. Bu yöntemlerden ilki INSERT INTO komutu içerisinde NULL değer alacak alanların yazılmamasıdır. Uygulanabilecek diğer yöntem ise boş bırakılmak istenilen alanlara NULL yazılmasıdır. Ancak veritabanına NULL değerlerinin girilmesi ve NULL değere sahip olan bu veriler üzerinde çalışırken bir takım veri tutarsızlıkları ile karşılaşılabilir. NULL değerlerin saklandığı alanlarda yapılan sorgulamalarda bazı hatalar oluşabileceği gibi ortaya çıkan sonuçlar da yanıltıcı olabilir.

Kullanıcı kayıt girişi sırasında varsayılan değer (DEFAULT) tanımlanmış alana herhangi bir veri girmezse, SQL Server tarafından otomatik olarak o alana ait varsayılan değer atanır. Varsayılan değerler tablo oluşturulurken tanımlanır.

Tablodan Kayıt Silme DELETE komutu kullanarak bir tabloda bulunan kayıt veya kayıtların istenildiği zaman silinmesi mümkündür. Genel yapısı aşağıdaki gibidir:

DELETE FROM TabloAdı WHERE Koşul

Yukarıdaki ifadede görüldüğü gibi DELETE komutu kullanılırken FROM ekinden sonra yazılan TabloAdı’ndaki kayıtları silme işlemi gerçekleştirmek için kullanılır. WHERE ifadesi ise kendisinden sonra yazılan Koşul ifadesi ile tablodaki hangi kayıtların silinmesi gerektiğini belirlemek için kullanılır. Eğer WHERE ifadesi yazılmaz ise bir koşul belirlenmez, böylece tablodaki bütün değerler silinir. Bu yüzden WHERE ifadesinden sonra koşul kullanmaya dikkat edilmesi gerekmektedir.

DELETE komutu ile silmeden önce kullanacağınız SELECT komutu ile silinecek verileri inceleyebilirsiniz. Silmeyi tamamlamak için SELECT komutundaki WHERE ifadesinden sonraki kısmı DELETE komutunda kullanabilirsiniz.

Bir tablodaki tüm kayıtları silmek için yukarıda verilen komuttaki gibi WHERE ifadesi kullanmadan DELETE ya da TRUNCATE komutu kullanılır. İşlem günlüğüne yazılmadığından dolayı TRUNCATE komutu ile yapılan silme işlemi geri alınamaz. TRUNCATE komutu, DELETE komutuna göre daha hızlı çalışır ve daha az sistem kaynağı kullandığından dolayı tercih edilir.

Silme işlemi yapılırken tablolar arasında bulunan ilişkilerin bozulmamasına dikkat edilmesi gerekmektedir. Birbiri ile bağlanmış tablolarda ana tablodaki kaydın silinmesi ile onunla ilişkili kayıtların silinmesini sağlayacak olan bir CASCADE DELETE (kademeli silme) yapısı SQL dilinde mevcuttur. ON DELETE CASCADE komutu ile temel olarak amaçlanan, veri bütünlüğünü sağlamak olmasına rağmen hangi tablonun hangi tablo ile bağlantılı olduğunun takibini yapmadan silme işlemi gerçekleştirmek mümkün olmaktadır. Kademeli silme özelliği ile bir tablodan veri silindiğinde otomatik olarak tüm bağlı tablolardaki kayıtlar da silinir, bu sayede tablolar arasındaki veri bütünlüğü de sağlanmış olur. Eğer tablo daha önceden oluşturulmuş ise ve o tabloya kademeli silme işlemi eklenmesi isteniyor ise ALTER TABLE işlemi ile CASCADE DELETE yapısı oluşturulması mümkündür.

Tablo verilerini düzenleme

UPDATE komutu ile bir veritabanı üzerinde bir tabloda istenilen bir kayıt ve kayıtların güncelleme işlemi yapılabilir. Bununla beraber UPDATE komutu kullanarak bir tabloda bulunan kayıtların bir kısmı veya tamamının da herhangi bir alanındaki veya tüm alanlarındaki değerleri istenildiği zaman değiştirmek/güncellemek mümkündür. Genel yapısı aşağıdaki gibidir.

UPDATE TabloAdı

SET alan1 = değer1, alan2 = değer2, …

WHERE Koşul.

Yukarıdaki ifadede UPDATE komutu kendisinden sonra yazılan TabloAdı’ndaki verileri güncelleme işlemi gerçekleştirmek için kullanılır. SET ifadesi güncellenecek alanlar ve bu alanların alacakları yeni değerleri belirlemek için kullanılır. WHERE ifadesi ise kendisinden sonra yazılan Koşul ifadesi ile tablodaki hangi kayıtların güncellenmesi gerektiğini belirlemek için kullanılır. Eğer WHERE ifadesi yazılmaz ise bir koşul belirlenmez, böylece tablodaki SET ifadesinden sonra belirtilen tüm alanların değerlerinde güncelleme işlemi gerçekleşir. Ancak bu durumda tüm kayıtlar etkilenir. Bu nedenle UPDATE komutunda WHERE ifadesinden sonra koşul kullanmaya dikkat edilmesi gerekmektedir.

Transaction

Bir veya birden fazla SQL ifadesi arka arkaya tek bir işlem gibi çalıştırılmak istenildiği zaman TRANSACTION yapısı kullanılır. TRANSACTION özellikle ardı ardına gelen ve birbiriyle bağımlı birden fazla SQL komutu tek bir SQL komutu olarak kullanılmasını sağlar. Bu sayede bir TRANSACTION kullanılarak yazılan SQL komutlarının ya tamamını gerçekleştirir veya hiçbiri gerçekleştirilmez. TRANSACTION işlemleri tek bir işlem olarak ele alacağı için herhangi birisi gerçekleşmediği zaman diğer gerçekleşen işlemleri de yok sayacaktır. Yani gerçekleşen işlemi geri alacaktır (ROLLBACK kavramı). Eğer işlemlerin tamamı sorunsuz bir şekilde gerçekleşirse, tüm işlemleri kalıcı(COMMIT kavramı) hâle gelecektir. TRANSACTION kullanımın genel yapısı aşağıdaki gibidir.

BEGIN TRANSACTION
işlem 1
işlem 2

...
islem n
ROLLBACK veya COMMIT

Yukarıda verilen TRANSACTION yapısı ile iki adımda gerçekleşen işlemlerin sanki tek bir işlem gibi davranması sağlanmıştır. TRANSACTION yapısının avantajlarından bir tanesi ise işlemlerden herhangi birinin yapılmaması veya işlem yapılırken birinde ortaya çıkacak hatadan dolayı tüm işlemlerin de yapılmamasını sağlamasıdır.

Genelde yoğun işlem yapılan ve işlemlerin tamamen bitmesinin çok önemli olduğu zamanlarda kullanılan TRANSACTION yapısı tüm işlemlerin tek bir işlem gibi kullanılmasına imkân vermektedir. Eğer sorgular TRANSACTION yapısı içinde yazılmış ise işlemlerin hepsi başarılı olana kadar tüm işlemler başarısız sayılır. TRANSACTION yapısını sonlandırma iki şekilde olmaktadır.

i. ROLLBACK: Transaction işlemindeki SQL komutu tarafından yapılmış olan tüm değişikliklerin geri almak için kullanılmaktadır. Yazılan SQL komutlarının herhangi birinde hata meydana gelmesi hâlinde bir sorun karşısında ROLLBACK işlemi ile kayıtları ilk hâline (transaction başladığı duruma) geri getirir.
ii. COMMIT: Oluşturulan TRANSACTION işlemi başarılı bir şekilde gerçekleştirildiğinde veritabanında tablolar üzerinde yapılan işlemlerin (örneğin INSERT, UPDATE, DELETE) tablolara kalıcı olarak aktarılmasıdır.

Ancak TRANSACTION yapısı içerisinde yazılmış olan komutların herhangi birinde hata olması durumunda TRANSACTION yapısının sonunda COMMIT yazılsa bile hatadan dolayı işlemlerden biri gerçekleşemeyeceği için (TRANSACTION bütün işlemleri tek bir işlem olarak ele aldığından ve başarım için bütün işlemlerin başarılı YBS206U-VERİTABANI SİSTEMLERİ Ünite 7: Veri İşleme 5 olması gerektiğinden dolayı) kayıt işlemleri gerçekleşmeyecektir (s:172, Şekil 7.28).