Bir Tabloyu Bir Sorguda Güncelleyip/Seçebilir miyim?

Giriş

SQL veritabanlarıyla çalışıyorsanız, bir değeri güncelleyip aynı anda veri almanız gereken bir durumla karşılaşabilirsiniz. Örneğin, kaç kez görüntülendiğini takip eden bir web sayfanız olduğunu düşünün. Sayfa her erişildiğinde görüntülenme sayısını artırmak ve mevcut görüntülenme sayısını da kullanıcıya göstermek istiyorsunuz. Ortak soru şudur: bu tek bir sorguda yapılabilir mi, yoksa iki farklı sorgu mu yürütmelisiniz?

Problem

Bir veritabanına erişirken, verimlilik için sorgu sayısını en aza indirmek hayati öneme sahiptir. Birden fazla sorgunun çalıştırılması, özellikle yüksek trafikli uygulamalarda performans sorunlarına yol açabilir. Bu nedenle, views sütununu güncelleyip güncellenmiş değeri tek bir işlemde seçmenin bir yolunu bulmak çok faydalı olabilir.

Çözüm

Geleneksel SQL, tek bir sorguda güncellemeyi ve seçmeyi doğrudan sağlamasa da, bu işlevselliği bir saklı prosedür aracılığıyla elde edebilirsiniz. Bu yöntem, gerekli işlemleri tek bir çağrılabilir rutin içinde kapsüller, ardından her iki görevi de sırasıyla yerine getirir.

Saklı Prosedür Nedir?

Saklı prosedür, veritabanında depolanan bir veya daha fazla SQL ifadesinin önceden derlenmiş bir koleksiyonudur. Tek bir çağrıda birden fazla işlem yapmanıza olanak tanır, böylece verimliliği artırılır. Bizim durumumuzda, şu şekilde bir saklı prosedür oluşturabiliriz:

  1. views sütununu artırır.
  2. Güncellenmiş değeri seçip döndürür.

Saklı Prosedür Oluşturma Adımları

  1. Saklı Prosedürü Tanımlayın: MySQL’de prosedürü tanımlamak için CREATE PROCEDURE ifadesini kullanacaksınız. Aşağıdaki örnek, nasıl kurabileceğinizi göstermektedir:

    DELIMITER //
    CREATE PROCEDURE UpdateAndSelectViews(IN pageID INT)
    BEGIN
        -- Belirtilen sayfa için görüntülenme sayısını güncelle
        UPDATE your_table_name 
        SET views = views + 1 
        WHERE id = pageID;
    
        -- Güncellenmiş görüntülenme sayısını seç
        SELECT views FROM your_table_name WHERE id = pageID;
    END //
    DELIMITER ;
    

    Bu örnekte, your_table_name ve id değerlerini gerçek tablo adınız ve ilgili tanımlayıcı sütun ile değiştirin.

  2. Saklı Prosedürü Çağırın: Prosedür oluşturulduktan sonra, bir sayfa görüntülendiğinde aşağıdaki ifade ile çağırabilirsiniz:

    CALL UpdateAndSelectViews(your_page_id);
    
  3. Sonuçları Kullanma: Çağrı, görüntülenme sayısını güncelleyip size yeni görüntülenme sayısını döndürecektir; bu sayede ayrı sorgulara olan ihtiyacı en aza indirmiş olursunuz.

Saklı Prosedür Kullanmanın Faydaları

  • Performans: Veritabanı sunucusuna yapılan çağrı sayısını azaltır.
  • Bakım Kolaylığı: Mantık veritabanında merkezi hale getirilmiş olup, yönetimi ve güncellemeyi kolaylaştırır.
  • Güvenlik: Mantık veritabanı katmanında işlendiğinde SQL enjeksiyon saldırılarına karşı koruma sağlar.

Sonuç

Sonuç olarak, standart SQL’de basitçe birleştirilmiş bir güncelleme-seçme ifadesi yazamazsanız da, saklı prosedürler etkili bir alternatif sunar. Bu, sadece görüntülenme sayılarını zahmetsizce artırmanıza değil, aynı zamanda gerekli verileri sorunsuz bir şekilde almanıza da olanak tanır. Saklı prosedürlerin uygulanması, veritabanı etkileşimlerinizi kolaylaştırmakla kalmaz, aynı zamanda uygulamanızın verimliliğini de artırır.

Bu yöntemi kullanarak, SQL işlemlerinizin hem performanslı hem de bakımı kolay olmasını sağlayabilirsiniz. İyi kodlamalar!