MySQL’de bir tablonun içeriğini boşaltmak için DELETE veya TRUNCATE ifadesi kullanılabilir. Ancak, bu iki ifade arasında önemli bir fark vardır.
DELETE ile Boşaltma:
DELETE FROM table_name;
Bu ifade, belirtilen tablodaki tüm satırları siler, ancak tablonun yapısını değiştirmez. Dolayısıyla, DELETE ifadesi kullanıldığında tablonun tüm verileri silinir, ancak tablonun sütunları, indeksleri ve kısıtlamaları değişmez.
TRUNCATE ile Boşaltma:
TRUNCATE TABLE table_name;
Bu ifade, belirtilen tablodaki tüm satırları hızlı bir şekilde siler ve tablonun yapısını değiştirmez. TRUNCATE ifadesi, DELETE ifadesinden daha hızlı çalışır ve tabloyu boşaltmak için genellikle tercih edilir. Ancak, TRUNCATE ifadesi kullanıldığında, tablonun sütunları, indeksleri ve kısıtlamaları değişmez.
Kısaca, bir MySQL tablosunun içeriğini boşaltmak için DELETE veya TRUNCATE ifadeleri kullanılabilir. DELETE ifadesi, satırları tek tek silerek çalışırken, TRUNCATE ifadesi tabloyu hızlı bir şekilde boşaltır. Hangi ifadenin kullanılacağı, tablonun yapısı ve ihtiyacınıza bağlı olarak değişebilir.
Tablo içindeki tüm veriyi boşaltmak için en doğru ve en verimli yöntem tartışmasız TRUNCATE TABLE komutudur.
Yazımı şöyle:TRUNCATE TABLE tablo_ismi;
Neden bu kadar önemli bu komut?
Öncelikle hız. Normal bir
DELETE FROM tablo_ismikomutu, her bir satırı teker teker siler ve bu silme işlemini işlem günlüğüne (transaction log) kaydeder. Büyük tablolarda bu çok zaman alır. TRUNCATE ise tablonun veri dosyalarını direkt olarak sıfırlar, bu yüzden saniyeler içinde biter.İkincisi, sıfırlama. Eğer tablonun otomatik artan (auto-increment) bir ID sütunu varsa,
TRUNCATEbu sayacı da otomatik olarak sıfırlar. Yani ilk ekleyeceğin kayıt tekrar ID=1 olur.DELETEkomutu kullanırsan, sayaç kaldığı yerden devam ederdi.Tek dikkat etmen gereken, TRUNCATE’in geri alınamaz (non-rollbackable) bir işlem olmasıdır. Yani yanlışlıkla yaparsan geçmiş olsun. O yüzden kullanmadan önce emin ol. Ama amacın tablo içini tamamen boşaltıp temizlemekse, en iyi komut budur.
Ya bu çok basit bir işlem aslında. Eğer tablonun tamamını boşaltmak istiyorsan ve baştan başlamak niyetindeysen kullanacağın komut kesinlikle TRUNCATE TABLE komutudur.
Şöyle yazacaksın:
TRUNCATE TABLE tablo_adı;
Bu komut, DELETE FROM komutundan çok daha hızlıdır. Çünkü her satırı tek tek silmek yerine, tablonun tüm yapısını koruyarak içindeki veriyi ve ayrılan alanı hızlıca sıfırlar. Ayrıca, auto-increment (otomatik artan) sütun varsa, onu da sıfırlayıp baştan 1’den başlatır. Eğer silme işleminin geri alınabilir olmasını istiyorsan veya sadece birkaç satırı silmek istiyorsan, o zaman
DELETE FROMkullanman gerekir ama sen tüm tabloyu boşaltmak istediğini söylemişsin, o yüzdenTRUNCATEen iyisi.İki yolu var bu işin, duruma göre değişir.
Hızlı Yol (Önerilen):
TRUNCATE TABLE tablo_adı;Bu komut, tablonun içindeki bütün kayıtları çabucak siliyor ve en önemlisi auto-increment değerini de sıfırlıyor. Yani yeni ekleyeceğin kayıt 1’den başlar tekrar. Performans açısından en hızlısı budur.Yavaş Yol (Şartlı Silme İçin):
DELETE FROM tablo_adı;Eğer bu komutu sadece tablo adıyla kullanırsan tüm tabloyu boşaltır. Ama bu işlem biraz yavaştır ve auto-increment değerini sıfırlamaz. EğerWHEREkoşulu eklemeyeceksenTRUNCATEkullanmak her zaman daha mantıklı.Sen boşaltma dediğin için TRUNCATE TABLE yaz gitsin, en temiz çözüm o.