# WHERE Şartsız DELETE ve UPDATE: En Pahalı Veritabanı Hatası

Veritabanı tarihinin en sık tekrarlanan ve en pahalı hatası muhtemelen budur. Basit bir gözden kaçırma, milyonlarca kaydı bir anda silebilir ya da güncelleyebilir.

* * *

## Nasıl Oluyor?

Geliştirici test ortamında şu sorguyu yazıyor:

sql

```sql
DELETE FROM Siparisler WHERE SiparisID = 12345
```

Test ediyor, çalışıyor. Production scriptini hazırlarken WHERE koşulunu unutuyor ya da yanlış kesiyor:

sql

```sql
DELETE FROM Siparisler
```

Çalıştırıyor. Tüm sipariş tablosu boşaldı.

Bu kulağa "böyle aptalca bir hata yapar mısın?" gibi gelebilir. Ama bu hata her yıl dünyada sayısız kez tekrarlanıyor. Baskı altında, yorgunken, aceleyle çalışırken dikkat dağılıyor.

* * *

## Neden Bu Kadar Yıkıcı?

**Geri alınamaz olabilir:** Transaction log ile belirli bir süreye kadar geri dönmek mümkün. Ama bu süre geçmişse ya da log backup'ı yoksa veri kalıcı olarak kaybedilmiş demektir.

**Hızlı gerçekleşir:** Milyonlarca kayıtlı bir tablo saniyeler içinde boşalabilir. Fark edildiğinde iş işten geçmiş olabilir.

**Etki zincirleme yayılır:** Silinen veriye bağımlı raporlar, uygulamalar ve diğer tablolar da etkilenir.

* * *

## Önleme Yöntemleri

**1\. SET ROWCOUNT ile test**

Production'da toplu DELETE veya UPDATE yapmadan önce etkilenecek satır sayısını kontrol edin:

sql

```sql
SELECT COUNT(*) FROM Siparisler WHERE Durum = 'Iptal'
-- Beklenen sayı ile karşılaştır, sonra DELETE'i çalıştır
```

**2\. Transaction içinde çalıştır**

sql

```sql
BEGIN TRANSACTION

DELETE FROM Siparisler WHERE Durum = 'Iptal'

SELECT @@ROWCOUNT AS SilinenSatir
-- Sayı beklenen değilse ROLLBACK yap
-- Beklenen değerse COMMIT yap

-- ROLLBACK TRANSACTION
-- COMMIT TRANSACTION
```

**3\. Deployment öncesi validasyon**

WHERE şartsız DELETE veya UPDATE içeren her script otomatik olarak yüksek risk olarak işaretlenmeli ve ek onay gerektirmeli.

* * *

## Gerçek Maliyeti

Veri kaybının teknik maliyetinin ötesinde başka maliyetler de var: müşteri güveni, itibar, olası hukuki sorumluluk ve tabii KVKK kapsamında kişisel veri kaybının bildirimi zorunluluğu.

Tek bir WHERE ifadesinin eksikliği tüm bu sonuçları doğurabilir.

* * *

## Sonuç

WHERE şartsız DELETE ve UPDATE her zaman kırmızı bayrak olmalı. Otomatik validasyon bu hataları deployment öncesinde yakalamanın en güvenilir yolu.

Detaylı bilgi için: [sqlchangeguard.com](http://sqlchangeguard.com)
