15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın
31.10.2024
1 +1

MySQL’de Tablo Temizleme: DELETE, TRUNCATE ve DROP’a Tam Rehber

MySQL tablosundan veri silmek veya temizlemek, veritabanı yönetiminin en rutin ancak önemli görevlerinden biridir. Eski kayıtları kaldırıyor, bir hazırlık ortamını sıfırlıyor veya eski bir tabloyu tamamen kaldırıyor olsanız da, yanlış komut seçmek geri döndürülemez veri kaybına veya beklenmeyen performans sorunlarına yol açabilir.

Bu kılavuz, bir MySQL tablosunu temizlemek için mevcut olan her yöntemi size gösterir — gerçek sözdizimi örnekleri, her yaklaşımın açık bir karşılaştırması ve verilerinizi güvende tutmak için en iyi uygulamalar ile birlikte.

1. Seçeneklerinizi Anlamak: “Tabloyu Temizlemek” Aslında Ne Demek?

MySQL’de “tabloyu temizlemek” tek bir işlem değildir — amacınıza bağlı olarak birkaç farklı eylemi ifade eder:

KomutVeriyi KaldırırYapıyı KaldırırOtomatik Artışı SıfırlarHız
DELETEEvet (seçici veya tümü)HayırHayırDaha Yavaş
TRUNCATEEvet (tüm satırlar)HayırEvetDaha Hızlı
DROPEvetEvetUygulanamazAnında

Herhangi bir komutu çalıştırmadan önce bu farkları anlamak kritik öneme sahiptir, özellikle üretim veritabanlarında. Kendi sunucu ortamınızı yönetiyorsanız — örneğin, bir VPS Hosting planında — MySQL’e tam kök erişiminiz vardır, bu da yanlışlıkla veri kaybını önleyen hiçbir koruma mekanizması olmadığı anlamına gelir.

2. Yöntem 1 — DELETE Komutunu Kullanmak

DELETE ifadesi en esnek seçenektir. Bir koşula dayalı olarak tablodan satırları kaldırır veya koşul sağlanmazsa tüm satırları kaldırır. TRUNCATE‘den farklı olarak, her bir satır silmeyi kaydeder, bu da büyük tablolarda daha yavaş olmasını sağlar ancak size ayrıntılı kontrol verir.

Tablodan Tüm Satırları Silmek

DELETE FROM table_name;

Bu, table_name içindeki her satırı kaldırır ancak tablo yapısını, dizinleri ve otomatik artış sayaçlarını korur. Depolama alanı diskte hemen geri kazanılmaz.

Bir Koşulla Eşleşen Satırları Silmek

DELETE FROM table_name WHERE condition;

Örnek — 90 günden eski kayıtları silmek:

DELETE FROM user_logs WHERE created_at < NOW() - INTERVAL 90 DAY;

DELETE’nin Temel Özellikleri

  • İşlemsel: DELETE tamamen ROLLBACK ile uyumludur. Bunu bir işlemde sarmalarsanız, bir şey yanlış giderse geri alabilirsiniz.
  • Tetikleyici uyumlu: Satır düzeyinde tetikleyiciler (BEFORE DELETE, AFTER DELETE) silinen her satır için çalışır.
  • Büyük tablolarda daha yavaş: Çünkü her silme işlemi ikili günlükte ve InnoDB yeniden yapma günlüğünde ayrı ayrı kaydedilir.
  • Otomatik artışı sıfırlamaz: Sonraki eklenen satır en yüksek kimlikten devam eder.

Güvenlik İpucu

Bir DELETE çalıştırmadan önce her zaman aynı WHERE cümlesi ile bir SELECT çalıştırın:

-- Preview what will be deleted
SELECT * FROM table_name WHERE condition;

-- Then delete
DELETE FROM table_name WHERE condition;

3. Yöntem 2 — TRUNCATE Komutunu Kullanmak

TRUNCATE TABLE, bir tablodan tüm satırları mümkün olan en hızlı şekilde silmeniz gerektiğinde tercih edilen komuttur. Bireysel satır silmelerini kaydetmek yerine, MySQL tabloyu dahili olarak bırakır ve yeniden oluşturur, bu da onu büyük veri setlerinde DELETE öğesinden önemli ölçüde daha hızlı hale getirir.

Sözdizimi

TRUNCATE TABLE table_name;

Örnek — Bir Oturum Önbelleği Tablosunu Sıfırlamak

TRUNCATE TABLE session_cache;

Bu komuttan sonra, tablo boş ve otomatik artış sayacı 1 olarak sıfırlanır.

TRUNCATE’nin Temel Özellikleri

  • Çoğu durumda işlemsel değildir: InnoDB tablolarında, TRUNCATE örtülü bir işlemi gerçekleştirir. Yürütüldükten sonra geri alamazsınız.
  • Otomatik artışı sıfırlar: Kimlik sayacı 1 öğesinden başlar.
  • WHERE cümlesi desteği yoktur: Satırları seçici olarak kaldıramazsınız — hepsi veya hiçbiri.
  • Satır düzeyinde tetikleyicileri çalıştırmaz: Satırlar ayrı ayrı silinmediğinden, DELETE tetikleyicileri çalışmaz.
  • Daha hızlı ve daha verimli: Geliştirme sıfırlamaları, test ortamları veya zamanlanmış bakım işleri için idealdir.

TRUNCATE Ne Zaman Kullanılır

TRUNCATE şu durumlarda kullanın:

  • Tüm tabloyu hızlı bir şekilde temizlemeniz gerektiğinde (örneğin, bir günlük tablosu, geçici veri tablosu veya önbellek tablosu).
  • Otomatik artış sayacının sıfırlanmasını istediğinizde.
  • Geri alma işleminin gerekli olmayacağından emin olduğunuzda.

4. Yöntem 3 — DROP Komutunu Kullanmak

DROP TABLE komutu üçünün en yıkıcısıdır. Tabloyu kalıcı olarak kaldırır — tüm veriler, dizinler, kısıtlamalar, tetikleyiciler ve tablo tanımı dahil. Bırakıldıktan sonra, tablo sıfırdan yeniden oluşturmadığınız veya bir yedekten geri yüklemediğiniz sürece ortadan kalkar.

Sözdizimi

DROP TABLE table_name;

Aynı Anda Birden Çok Tabloyu Bırakmak

DROP TABLE table_one, table_two, table_three;

Bir Tabloyu Yalnızca Varsa Bırakmak (Hataları Önler)

DROP TABLE IF EXISTS table_name;

Bu, özellikle tablo varlığından emin olamayacağınız geçiş komut dosyaları veya dağıtım otomasyonunda kullanışlıdır.

DROP’un Temel Özellikleri

  • Kalıcı ve geri döndürülemez yedek olmadan.
  • Her şeyi kaldırır: Veriler, yapı, dizinler, yabancı anahtar kısıtlamaları ve tetikleyiciler.
  • Hızlı: TRUNCATE ile yürütme hızında benzer çünkü temel veri dosyalarını serbest bırakır.
  • Yeniden oluşturma gerektirir: Tabloyu tekrar kullanmak için tam bir CREATE TABLE ifadesi vermeniz gerekir.

DROP Ne Zaman Kullanılır

DROP yalnızca şu durumlarda kullanın:

  • Tablo eski ve artık şemada gerekli değildir.
  • Tam bir veritabanı temizliği veya geçişi gerçekleştiriyorsunuz.
  • Verilerin onaylanmış, test edilmiş bir yedeğiniz vardır.

5. Doğru Yöntemi Seçmek: Karar Rehberi

Hangi komutu kullanacağından emin değil misiniz? Bu mantığı izleyin:

  • Belirli satırları silmeniz gerekiyor mu?WHERE cümlesi ile DELETE kullanın.
  • Tüm satırları kaldırmanız ancak tablo yapısını tutmanız gerekiyor mu?TRUNCATE kullanın.
  • Otomatik artışı veri temizliği ile birlikte sıfırlamanız gerekiyor mu?TRUNCATE kullanın.
  • Tabloyu veritabanından tamamen kaldırmanız gerekiyor mu?DROP kullanın.
  • İşlemi geri alma yeteneğine ihtiyacınız var mı?DELETE öğesini bir işlemde kullanın.
  • Yabancı anahtar kısıtlamaları olan bir tablo ile çalışıyor musunuz?DELETE kullanın (yabancı anahtar denetimleri etkinleştirilirse TRUNCATE başarısız olabilir).

6. Herhangi Bir MySQL Tablosunu Temizlemeden Önce Gerekli Önlemler

Hangi yöntemi seçerseniz seçin, bu önlemler sizi kritik bir veri kaybı olayından kurtarabilir.

Her Zaman Önce Verilerinizi Yedekleyin

Herhangi bir yıkıcı komutu çalıştırmadan önce tabloyu dışa aktarın:

-- Export to a SQL dump using mysqldump (run from terminal)
mysqldump -u username -p database_name table_name > table_backup.sql

Veya barındırma kontrol panelinize entegre edilmiş tam bir veritabanı yedekleme aracı kullanın. cPanel ile VPS üzerindeyseniz, komut satırına dokunmadan doğrudan cPanel arayüzünden otomatik MySQL yedeklemelerini planlayabilirsiniz.

DELETE İşlemleri için İşlemleri Kullanın

DELETE ifadelerinizi bir işlemde sarmalayın, böylece etkileri gözden geçirdikten sonra işleyebilirsiniz:

START TRANSACTION;

DELETE FROM orders WHERE status = 'cancelled' AND created_at < '2023-01-01';

-- Review the affected row count, then decide:
ROLLBACK;  -- Undo if something looks wrong
-- or
COMMIT;    -- Confirm the deletion

Çalıştırmadan Önce İzinleri Doğrulayın

Her veritabanı kullanıcısının DELETE, ###PPT

15%

Tüm Hosting Hizmetlerinde %15 indirim

Becerilerini test et ve herhangi bir hosting planında İndirim kazan

Kodu kullanın:

Skills
Başlayın