Serkan Ayyıldız

Meraklı bir yazılım uzmanı...

SQL Delete Sorgusu

Bir veritabanı dersimizde yine merhaba :)

Önceki SQL makalemizde veritabanına eklenen verileri kullandığımız update sorgusunu görmüş ve BakkalDB örnek veritabanımız üzerinde küçük uygulamalar gerçekleştirmiştik.Bugün ise delete sorgusunu öğreneceğiz.

DML sorgu tiplerinden birisi olan Update sorgusu,veritabanına eklenen verileri silmemize olanak sağlamaktadır ve tıpkı
update sorgusunda olduğu gibi çok dikkatli kullanılması gereken bir sorgu tipidir.
Delete sorgusunun genel yapısı ise:

Delete from TabloAdı

şeklindedir.

Delete sorgusunun çalışabilmesi için en önemli koşul silinecek verinin korumalı olmaması ve foreign key ile başka bir
tablodaki veriye referans vermemesi gerektiğidir.Bu koşul sağlanırsa delete sorgusu kendisine tanımlanan tablodaki
verileri kalıcı olarak siler.

Örnek olarak BakkalDB veritabanımızı açalım ve daha önce hiç veri girmediğimiz "Urunler" tablosuna yeni kayıtlar 
ekleyelim,tabi öncelikle tablomuzun yapısına bir bakalım:

SQL-Tablo

Gördüğünüz gibi ürünler tablomuz MarkaID ve AltKategoriID isimde iki kolonu var bu kolonlar "Markalar" ile  "AltKategoriler" tablolarındaki aynı isimli kolonlardan referans veri almaktadır,dolayısıyla ürün ekleyeceğimiz zaman
diğer ilgili iki tablodaki ID değerlerine göre veri ekleyebileceğiz.
İlgili tablolardaki verilere select sorgusuyla bir gözatalım:

SQL-Select

Veriler karşımızda ve her iki tablodan birer veri seçip ürünler tablosuna foreign key referansı verelim,örnek olarak 
markalar tablosundan MarkaID'si 2 olan "Ülker"i ve AltKategoriler tablosundan AltKategoriID'si 4 olan "Kraker" i seçelim
ve yeni ürün kaydı yapalım.
Hatırlarsanız bir tabloya veri eklerken insert sorgusunu kullanıyorduk,şimdi sorgumuzu yazalım:

SQL-Insert-sorgusu

Şimdi de "Eti" markasına ve "Bisküvi" alt kategorisine ait yeni bir ürün ekleyelim,MarkaID'miz 1, AltKategoriID'miz de 1:

SQL-insert

Yeni ürün kaydımızı yaptık ve elimizde iki farklı ürünümüz var,şimdi asıl konumuz olan Delete sorgusuna dönelim.
Eklediğimiz bu iki ürünü silmek için şimdi delete sorgumuzu yazıyoruz:

SQL-Delete-Sorgusu

ve o da ne,tüm verilerimiz gitti! Demek ki delete sorgusunu kullanırken çok dikkatli davranmalıyız ve şimdi ise delete
sorgusunda where koşulunu kullanmaya geldi.

Tıpkı update sorgusunda gördüğümüz gibi where koşulu sayesinde veritabanımızdaki verileri komple silmek yerine sadece belli koşullara uyan verileri silmemiz mümkün olmaktadır.Böyle bir kullanım sonucu veri kaybı riskini biraz düşürme
şansına sahip oluyoruz.
Where koşulunun delete sorgusu syntaxındaki kullanımı ise:

Delete from where Kolon=Deger

şeklindedir.

Bununla ilgili örneğimizi görmek için az önce sildiğimiz iki ürünü yeniden insert sorgusuyla yerlerine koyup bu defa
ürün adı "Çubuk Kraker" olan ürünümüzü sileceğiz:

SQL-insert

Silme işleminde dikkat edeceğimiz nokta where koşulundaki kolon seçimidir,eğer yanlış kolon seçilerek sorgu çalıştırılırsa
varsa o kolon bilgisine ait diğer verilerin gitmesi sözkonusu olabileceğinden aman dikkat edelim,bu örneğimizde kolon 
seçimimiz primary key olan "UrunID" kolonudur.
Sileceğimiz ürünün UrunID'si 3

SQL-silme-sorgusu

SQL-Delete

TSQL-Delete

Böylece sadece UrunID'si 3 olan ürünümüzü veritabanımızdan kaldırmış oluyoruz.

Delete sorgusu ile insert sorgusu arasında bilmemiz gereken bir püf nokta var; eğer bir ürünü sildikten sonra yerine bire 
bir aynı bilgilerle yeniden insert kullanarak veritabanına eklemeye çalışsak bile yeni primary key ID değeri o an ki 
tabloya ait en yüksek ID değerinden +1 fazla olacaktır.

Bu açıklamayı daha iyi anlamak için where koşulu olmadan sildiğimiz ürünlerin görsellerini yeniden insert ettikten sonraki
görselle karşılaştırınca anlayabilirsiniz,çünkü önceki ID değerleri 1-2 iken silinip yeniden insert edildiklerinde bu defa
3-4 oldu.

Delete sorgusuyla ilgili olarak konunun başında belirttiğimiz gibi veritabanından bir kaydın silinebilmesi için silinecek 
kayda ait başka bir tablonun referans almaması gerektiğidir.

Örneğin şimdiye kadar kategori,alt kategori,marka ekleme işlemleri gerçekleştirdik.Veritabanının yapısına baktığımızda ise
alt kategori tablosundaki kayıtlar kategoriler tablosundaki kayıtlara bağlıdırlar,yani alt kategori tablosundaki veriler 
kategoriler tablosundaki verilere bağımlıdırlar ve dolayısıyla bu bağlılık koşulunu sağlayan bir kategori tablosundaki 
veriyi delete sorgusuyla silemeyiz,silersek aşağıdaki hatayı alırız:

SQL-Select-Delete

SQL-Delete-Hata

Dolayısıyla foreign key bağlılığı olan veriler delete sorgusuyla doğrudan silinemezler,bu işlem için ek sorgular
gerekmektedir ve henüz o konulara gelmedik.

SQL Delete sorgusuyla ilgili olarak şimdilik bilmemiz gerekenler bu kadar yeterli diye umuyorum,bir sonraki makalemizde
görüşmek dileğiyle hoşçakalın :)

1 Yorum:

  1. kamil
    10/8/2013

    güzel devamını bekliyoruz

Bir yorum bırak E-posta adresiniz yayınlanmayacaktır.

Menu