- Konu sahibi
- #1
Bir tablodaki belirli kayıtları silmek için
Söz dizimi şöyledir:
Örneğin
Sonuçta yalnızca silmek istediğiniz müşteri görünüyorsa şu komutu çalıştırın:
Birden fazla kaydı, örneğin pasif müşterileri silmek istiyorsanız, koşulu önce tek başına sorgulayın:
Dönen satırlar silinmesini beklediğiniz kayıtlarla aynıysa aynı
İşlem sonrası veritabanı aracı genellikle etkilenen satır sayısını bildirir. Bu sayı sıfırsa koşul hiçbir satırla eşleşmemiş olabilir; beklenenden yüksekse yanlış koşul, yinelenen değerler veya daha geniş bir eşleşme söz konusu olabilir. Sayı, sadece komutun kaç satırı etkilediğini gösterir; silinenlerin iş açısından doğru kayıtlar olduğunu tek başına kanıtlamaz. Sonucu aynı koşulla yeniden
Veritabanı işlem (transaction) destekliyorsa ve oturumunuz otomatik olarak her komutu kaydetmiyorsa, silmeyi işlem bloğunda yapıp sonucu doğrulayabilir, yanlışsa
İşlem
DELETE FROM komutunu WHERE koşuluyla kullanın. Önce aynı koşulla SELECT çalıştırıp silinecek satırları doğrulayın; ardından DELETE komutunu yürütüp etkilenen satır sayısını kontrol edin. WHERE koşulunu atlarsanız tablodaki bütün kayıtlar silinir.Belirli kayıtları silme
Söz dizimi şöyledir:
SQL:
DELETE FROM tablo_adi
WHERE koşul;
Örneğin
musteriler tablosunda id değeri 42 olan kaydı silmek için önce eşleşmeyi kontrol edin:
SQL:
SELECT *
FROM musteriler
WHERE id = 42;
Sonuçta yalnızca silmek istediğiniz müşteri görünüyorsa şu komutu çalıştırın:
SQL:
DELETE FROM musteriler
WHERE id = 42;
id birincil anahtarsa koşul tek bir kaydı hedefler. Birincil anahtar olmayan bir alanla koşul kurarsanız aynı değere sahip birden fazla satır silinebilir; bu nedenle önce SELECT sonucundaki satırları inceleyin. Metin değeri kullanırken genellikle tek tırnak gerekir: WHERE durum = 'pasif'.Silmeden önce koşulu doğrulayın
Birden fazla kaydı, örneğin pasif müşterileri silmek istiyorsanız, koşulu önce tek başına sorgulayın:
SQL:
SELECT id, ad, durum
FROM musteriler
WHERE durum = 'pasif';
Dönen satırlar silinmesini beklediğiniz kayıtlarla aynıysa aynı
WHERE koşulunu DELETE içinde kullanın:
SQL:
DELETE FROM musteriler
WHERE durum = 'pasif';
İşlem sonrası veritabanı aracı genellikle etkilenen satır sayısını bildirir. Bu sayı sıfırsa koşul hiçbir satırla eşleşmemiş olabilir; beklenenden yüksekse yanlış koşul, yinelenen değerler veya daha geniş bir eşleşme söz konusu olabilir. Sayı, sadece komutun kaç satırı etkilediğini gösterir; silinenlerin iş açısından doğru kayıtlar olduğunu tek başına kanıtlamaz. Sonucu aynı koşulla yeniden
SELECT ederek kontrol edin.Tüm tabloyu boşaltma ve geri alma
WHERE olmadan çalıştırılan DELETE FROM musteriler; tablodaki tüm satırları siler; tablo yapısı kalır. Bunu yalnızca gerçekten bütün kayıtları kaldırmak istediğinizden emin olduğunuzda kullanın. DROP TABLE ise satırları değil tablonun kendisini kaldırır; iki işlem aynı değildir.Veritabanı işlem (transaction) destekliyorsa ve oturumunuz otomatik olarak her komutu kaydetmiyorsa, silmeyi işlem bloğunda yapıp sonucu doğrulayabilir, yanlışsa
ROLLBACK ile geri alabilir, doğruysa COMMIT ile kalıcılaştırabilirsiniz. Örnek, işlem söz dizimini destekleyen sistemlerde genel biçimi gösterir; ayrıntılar veritabanına göre değişebilir:
SQL:
BEGIN;
DELETE FROM musteriler
WHERE id = 42;
-- Etkilenen satırları kontrol edin.
-- Doğruysa:
COMMIT;
-- Yanlışsa, COMMIT yerine:
-- ROLLBACK;
İşlem
COMMIT edildikten sonra geri alma olanağı veritabanı yapılandırmasına ve yedeklere bağlıdır. Yabancı anahtar ilişkileri silmeyi engelleyebilir ya da veritabanında tanımlı silme davranışına göre ilişkili satırları da etkileyebilir; böyle bir durumda hata mesajını ve ilgili kısıtın davranışını kontrol edin.