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;
-- ...