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:
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:
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:
Şimdi de "Eti" markasına ve "Bisküvi" alt kategorisine ait yeni bir ürün ekleyelim,MarkaID'miz 1, AltKategoriID'miz de 1:
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:
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:
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
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:
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 :)
Ö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:
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:
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:
Şimdi de "Eti" markasına ve "Bisküvi" alt kategorisine ait yeni bir ürün ekleyelim,MarkaID'miz 1, AltKategoriID'miz de 1:
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:
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
ş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:
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
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:
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 :)
güzel devamını bekliyoruz