Red Kit

WFN Üye
Konular
631
Mesajlar
631
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Adana
Web Sitesi
Var
Alanı
Makale Yazarı
1/1
Konu sahibi
SQL tablosundaki verileri silmek için genellikle DELETE komutu kullanılır. Belirli kayıtları kaldıracaksanız WHERE koşulu ekleyin; koşulu yazmazsanız tablodaki tüm satırlar silinir. İşlemi çalıştırmadan önce doğru veritabanında ve doğru tabloda olduğunuzu kontrol edin. Geri alınabilir bir işlem yapmak istiyorsanız komutu bir işlem bloğu içinde çalıştırıp sonucu doğruladıktan sonra COMMIT uygulayın.

Belirli kayıtları silme​


Örneğin users tablosunda kimliği 25 olan kaydı silmek için şu sorgu kullanılır:

SQL:
DELETE FROM users
WHERE id = 25;

Bu sorgu, id değeri 25 olan satırı silmeyi dener. Beklenen sonuç, sorgunun bir satırı etkilemesidir. Hiçbir satır etkilenmezse bu koşula uyan kayıt yoktur; bu durum sorgunun hata verdiğini veya başka bir kaydın silindiğini göstermez. Birden fazla satır etkilenirse WHERE koşulu birden fazla kaydı eşleştiriyor demektir.

Silinecek kayıtları önce SELECT ile kontrol etmek güvenli bir alışkanlıktır:

SQL:
SELECT *
FROM users
WHERE id = 25;

Sonuçta beklediğiniz satır görünüyorsa aynı WHERE koşulunu DELETE sorgusunda kullanabilirsiniz. Koşulun belirli bir değer yerine tarih, durum veya başka bir alanla kurulması da mümkündür:

SQL:
DELETE FROM orders
WHERE status = 'cancelled'
  AND created_at < '2025-01-01';

Bu örnek yalnızca durumu cancelled olan ve belirtilen tarihten önce oluşturulan siparişleri hedefler. Tarih biçimi ve sütun türü kullandığınız veritabanı sistemine göre değişebileceği için önce aynı koşulla SELECT çalıştırarak eşleşen kayıt sayısını kontrol edin.

Tablodaki tüm satırları silme​


Tablonun yapısını koruyup bütün satırları kaldırmak için WHERE içermeyen DELETE kullanılabilir:

SQL:
DELETE FROM users;

Bu komut tablodaki tüm satırları siler; tablo, sütunlar ve çoğu tablo tanımı yerinde kalır. Kayıtların tamamını silmek istiyor olsanız bile bu komutu doğrudan çalıştırmadan önce tablo adını ve bağlı uygulamaları kontrol edin. Yanlış tablo adı kullanılması geri dönüşü zor bir veri kaybına yol açabilir.

Tüm satırları temizlemek için bazı veritabanlarında TRUNCATE daha uygun olabilir:

SQL:
TRUNCATE TABLE users;

Ancak TRUNCATE davranışı; işlem desteği, otomatik artan sayaçların sıfırlanması, dış anahtar kısıtlamaları ve geri alma olanağı bakımından veritabanı ürününe göre değişebilir. Bu nedenle DELETE ile TRUNCATE seçimini yalnızca komutun kısa olmasına göre yapmayın.
KomutNe yapar?Ne zaman tercih edilir?
DELETE... WHEREKoşula uyan satırları siler.Belirli kayıtları kaldırırken.
DELETE FROM tabloTablodaki tüm satırları siler.Satır satır silme davranışına ihtiyaç duyulduğunda.
TRUNCATE TABLETablodaki tüm satırları topluca temizler; ayrıntılı davranışı ürüne göre değişir.Tablo yapısı korunarak hızlı temizlik gerektiğinde ve kısıtlar doğrulandığında.
DROP TABLETablonun kendisini, yani verileri ve tablo tanımını kaldırır.Tabloya artık hiç ihtiyaç yoksa.
Tabloyu tamamen ortadan kaldırmak istiyorsanız kullanılan komut DROP TABLE olur:

SQL:
DROP TABLE users;

Bu işlem yalnızca kayıtları değil, tablonun kendisini de kaldırır. Dolayısıyla "tablodaki verileri silmek" ile "tabloyu silmek" aynı şey değildir. Tablonun yapısını, sütunlarını ve ilişkilerini korumak istiyorsanız DROP TABLE kullanmayın.

Silme işleminden önce geri alınabilir çalışma​


Veritabanınız işlem desteği sağlıyorsa silme işlemini önce bir işlem içinde deneyebilirsiniz:

SQL:
BEGIN;

SELECT *
FROM users
WHERE id = 25;

DELETE FROM users
WHERE id = 25;

-- Sonucu kontrol edin.
-- Doğruysa:
COMMIT;

-- Yanlışsa COMMIT yerine ROLLBACK kullanın:
-- ROLLBACK;

COMMIT, yapılan değişiklikleri kesinleştirir; ROLLBACK ise işlem henüz kesinleştirilmeden önceki duruma dönmeyi dener. Bunun çalışıp çalışmayacağı ve hangi komutların geri alınabileceği kullanılan veritabanı sistemi, tablo motoru ve bağlantı ayarlarına bağlıdır. Bu yüzden kritik verilerde ayrıca yedek veya doğrulanmış geri yükleme planı bulunmalıdır; işlem bloğu tek başına yedek değildir.

Silme işlemi beklenenden farklı sonuç verirse​


Sorgu hata veriyorsa hata mesajını, kullandığınız veritabanı ürününü ve sorgunun ilgili bölümünü birlikte inceleyin. Dış anahtar ilişkisi olan bir satırın silinememesi, başka tablolardaki kayıtların bu satıra bağlı olduğunu gösterebilir. Bu durumda bağlı kayıtların silinip silinmeyeceği veya ilişkinin ON DELETE davranışının nasıl tanımlandığı belirlenmeden kısıtı kaldırmak güvenli değildir.

Sorgu başarıyla çalıştığı hâlde kayıt görünmeye devam ediyorsa aynı bağlantıda doğru tabloyu sorguladığınızı, işlemi COMMIT ile kesinleştirmeniz gerekip gerekmediğini ve uygulamanın başka bir veritabanına bağlanıp bağlanmadığını kontrol edin. Sorgunun etkilediği satır sayısı da önemlidir: beklenenden fazla satır silindiyse işlemi durdurun, kalan verileri değiştirmeyin ve geri alma olanağı varsa hemen ROLLBACK uygulayın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic