MySQL Database Management

MySQL’de Upsert’lere Hakim Olma: Kayıtları Etkin Şekilde Güncelleme veya Ekleme

Spread the love

MySQL’de veri güncellemelerini verimli bir şekilde yönetmek, genellikle mevcut bir kaydı güncellemeniz veya kayıt zaten yoksa yeni bir kayıt eklemeniz gereken durumları ele almayı gerektirir. Yaygın olarak upsert olarak bilinen bu işlem, veri bütünlüğünü korumak ve tutarsızlıkları önlemek için çok önemlidir. Bu makale, MySQL’de upsert işlemlerini gerçekleştirmenin çeşitli yöntemlerini inceleyerek, güçlü ve zayıf yönlerini karşılaştırarak belirli ihtiyaçlarınız için en iyi yaklaşımı seçmenize yardımcı olur.

İçindekiler

Yöntem 1: INSERT ... ON DUPLICATE KEY UPDATE Kullanımı

Bu, MySQL’de upsert işlemleri için en basit ve genellikle en verimli yöntemdir. Yinelenen bir anahtar bulunursa hangi sütunların güncelleneceğini belirten ON DUPLICATE KEY UPDATE yan tümcesini kullanır. Hedef tabloda benzersiz bir anahtar kısıtlaması (birincil anahtar veya benzersiz indeks) gereklidir.


INSERT INTO tablo_adı (sütun1, sütun2, sütun3, ...)
VALUES (değer1, değer2, değer3, ...);
ON DUPLICATE KEY UPDATE
    sütun1 = VALUES(sütun1),
    sütun2 = VALUES(sütun2),
    ...;

VALUES(sütunN), yalnızca belirtilen sütunların güncellenmesini sağlayan INSERT deyimindeki değerlere başvurur.

Yöntem 2: Saklı Yordam Kullanımı

Karmaşık senaryolar için veya upsert mantığı üzerinde daha fazla kontrole ihtiyaç duyulduğunda, saklı bir yordam esneklik sunar. Varlık kontrolünü ve güncelleme/ekleme mantığını yordam içine kapsularsınız.


DELIMITER //

CREATE PROCEDURE upsert_veri(IN p_id INT, IN p_ad VARCHAR(255), IN p_değer INT)
BEGIN
    DECLARE mevcut_satır INT DEFAULT 0;

    SELECT COUNT(*) INTO mevcut_satır FROM tablo_adı WHERE id = p_id;

    IF mevcut_satır > 0 THEN
        UPDATE tablo_adı SET ad = p_ad, değer = p_değer WHERE id = p_id;
    ELSE
        INSERT INTO tablo_adı (id, ad, değer) VALUES (p_id, p_ad, p_değer);
    END IF;
END //

DELIMITER ;

Yöntem 3: MERGE Deyimi Kullanımı (MySQL 8.0 ve üzeri)

MySQL 8.0, daha güçlü ve açıklayıcı bir upsert çözümü sunan MERGE deyimini tanıtmıştır. Eşleşen koşullara bağlı olarak koşullu güncellemeler ve eklemeler sağlar.


MERGE INTO tablo_adı AS hedef
USING (SELECT p_id, p_ad, p_değer) AS kaynak
ON (hedef.id = kaynak.p_id)
WHEN MATCHED THEN UPDATE SET hedef.ad = kaynak.p_ad, hedef.değer = kaynak.p_değer
WHEN NOT MATCHED THEN INSERT (id, ad, değer) VALUES (kaynak.p_id, kaynak.p_ad, kaynak.p_değer);

Doğru Yöntemi Seçme

  • INSERT ... ON DUPLICATE KEY UPDATE: Benzersiz anahtar kısıtlaması ve basit güncelleme mantığına sahip basit upsert işlemleri için en iyisidir. Genellikle en verimli olanıdır.
  • Saklı Yordam: Karmaşık mantık, koşullu güncellemeler veya upsert içinde ek işlemler için uygundur. Karmaşık senaryolar için daha iyi kapsülleme ve sürdürülebilirlik sunar.
  • MERGE Deyimi: Özellikle birden fazla koşul ve eylemle karmaşık upsert işlemlerini ele almanın özlü ve güçlü bir yolunu sağlar. MySQL 8.0 veya üzeri gerektirir.

Örnek Senaryolar ve Kod

id (INT, BİRİNCİL ANAHTAR), ad (VARCHAR(255)) ve fiyat (DECIMAL(10,2)) sütunlarına sahip bir ürünler tablosunu düşünün.

INSERT ... ON DUPLICATE KEY UPDATE kullanarak:


INSERT INTO ürünler (id, ad, fiyat) VALUES (1, 'Ürün A', 19.99)
ON DUPLICATE KEY UPDATE ad = VALUES(ad), fiyat = VALUES(fiyat);

Bu, id 1 yoksa yeni bir satır ekler veya varsa ad ve fiyat değerlerini günceller.

Bu makale, MySQL’de upsert tekniklerinin kapsamlı bir genel bakışını sunmaktadır. En uygun yöntem, belirli gereksinimlerinize ve veri manipülasyonu karmaşıklığınıza bağlıdır. Her zaman performans etkilerini göz önünde bulundurun ve uygulamanız için en verimli yaklaşımı seçin.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir