ProgramlamaVeritabanı mühendisi

SQL'de verilerin güvenli bir şekilde silinmesi/temizlenmesi (DELETE, TRUNCATE) prosedürlerini ve özelliklerini açıklayın. Aralarındaki farklar nelerdir, işlem, kilit ve tetikleyiciler ile ilgili kısıtlamalar nelerdir ve verileri yanlışlıkla nasıl kaybetmemek gerekir?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

DELETE ve TRUNCATE - her ikisi de tabloları temizlemek için araçlardır, ancak farklı çalışırlar:

  • DELETE koşula göre veya hepsini siler, WHERE'yi destekler, geri alınabilir, tetikleyicileri etkinleştirir. Büyük sayıda satırla (her bir satır için) yavaş olabilir.
  • TRUNCATE tüm tabloyu anında temizler, WHERE kullanamazsınız, genellikle satır bazında günlüklenmez, her zaman tetikleyicileri etkinleştirmez. Çoğu durumda, işlem geri alınamaz, bazı DBMS'lerde geri alınamaz.

İnce Noktalar:

  • DELETE, işlem geri alma (ROLLBACK) desteği sunar, TRUNCATE - hayır ya da DBMS'ye bağlıdır.
  • TRUNCATE genellikle kimlik/sıra sayacını sıfırlar.
  • TRUNCATE, dış anahtarlar veya tabloya referanslar olduğunda kullanılamaz.

Örnek:

-- 3 yıldan eski siparişleri sil DELETE FROM orders WHERE created_at < CURRENT_DATE - INTERVAL '3 years'; -- Tabloyu tamamen temizlemek (hızlı) TRUNCATE TABLE logs;

Soru ile İlgili Riskler

TRUNCATE sonrası veriler geri alınabilir mi?

Tipik bir hata: DELETE gibi TRUNCATE'ın da işlem içerisinde geri alınabileceğini düşünmek. Ancak TRUNCATE genellikle geri alınamaz veya UNDO yapılamaz, yalnızca bazı DBMS'ler (örneğin, PostgreSQL işlem içinde çalışırken).

Örnek (çoğu DBMS'de):

BEGIN; TRUNCATE TABLE orders; ROLLBACK; -- Çoğu DBMS'de çalışmaz, veriler kayboldu!

Bu Konudaki Bilgisizlikten Kaynaklanan Gerçek Hataların Örnekleri


Hikaye

Üretim veritabanında TEST yerine TRUNCATE ile geçici verilerin silinmesi. Silme işlemi için tetikleyici sadece DELETE üzerinde çalıştı — kaybolan veriler, zaman ve kullanıcı bilgisi yok. Olay çözümü zarar gördü.


Hikaye

Dış anahtarın bulunduğu tabloda TRUNCATE ile temizleme. SQL, referans bütünlüğü kısıtlaması nedeniyle hata verdi, script tamamlanmadı, otomasyon durdu. Çözüm: dış anahtarları geçici olarak kaldırmak veya DELETE kullanmak.


Hikaye

Büyük tablolarda DELETE ile toplu veri silme işlemi: uzun süreli kilitler nedeniyle veritabanı "dondu", diğer işlemler kilitlerin serbest bırakılmasını bekledi. Sonuç — sistemin durması. Doğru: destekleniyorsa DELETE LIMIT/OFFSET kullanmak veya toplu işlemler.