Veri Güncelleme (UPDATE)

Mevcut verileri güncelleme teknikleri

Temel UPDATE

UPDATE products SET price = 2000 WHERE id = 1;
WHERE olmadan UPDATE tüm tabloyu günceller! Her zaman önce SELECT ile kontrol edin.

Çoklu Kolon Güncelleme

UPDATE users SET
    full_name = 'Ahmet Yılmaz',
    email = 'ahmet.yilmaz@example.com',
    phone = '+90 532 123 4567',
    updated_at = NOW()
WHERE id = 5;

Hesaplanmış Güncelleme

-- Fiyatlara %10 zam
UPDATE products SET price = price * 1.10;

-- Belirli kategoride %15 indirim
UPDATE products SET 
    price = price * 0.85,
    updated_at = NOW()
WHERE category = 'Electronics' AND stock > 0;

-- Stok düşürme
UPDATE products SET stock = stock - 5 WHERE id = 10;

Koşullu Güncelleme (CASE)

UPDATE products SET
    price = CASE
        WHEN category = 'Electronics' THEN price * 1.15
        WHEN category = 'Furniture' THEN price * 1.10
        ELSE price * 1.05
    END,
    updated_at = NOW()
WHERE is_active = TRUE;

Başka Tablodan Güncelleme

-- FROM kullanarak
UPDATE orders o SET
    status = 'shipped',
    shipped_at = s.shipped_at
FROM shipments s
WHERE o.id = s.order_id AND s.status = 'completed';

-- Subquery ile
UPDATE products SET
    category_id = (SELECT id FROM categories WHERE name = 'Electronics')
WHERE category = 'Electronics';

RETURNING ile Güncelleme

UPDATE orders SET
    status = 'cancelled',
    cancelled_at = NOW()
WHERE id = 100
RETURNING id, status, cancelled_at;

-- Güncellenen kayıt sayısını al
WITH updated AS (
    UPDATE products SET stock = 0 WHERE stock < 0 RETURNING id
)
SELECT COUNT(*) FROM updated;

Toplu Güncelleme Optimizasyonu

-- İyi: Tek sorguda birden fazla değer
UPDATE products SET price = 
    CASE id
        WHEN 1 THEN 100
        WHEN 2 THEN 200
        WHEN 3 THEN 300
    END
WHERE id IN (1, 2, 3);

-- Kötü: Her biri için ayrı sorgu (yavaş)
-- UPDATE products SET price = 100 WHERE id = 1;
-- UPDATE products SET price = 200 WHERE id = 2;
-- ...