MySQL Transaction ile Tutarlı Sipariş Kaydı
MySQL Transaction ile Tutarlı Sipariş Kaydı hakkında dağınık bilgiler yerine derli toplu bir kaynak arıyorsanız doğru yerdesiniz. Bu yazı 5 temel noktayı ve bunları bir araya getiren PHP örneğini sade bir dille açıklıyor.
MySQL Transaction ile Tutarlı Sipariş Kaydı hakkında dağınık bilgiler yerine derli toplu bir kaynak arıyorsanız doğru yerdesiniz. Bu yazı 5 temel noktayı ve bunları bir araya getiren PHP örneğini sade bir dille açıklıyor.
Konuya genel bakış
Bir sipariş kaydı genellikle birkaç tabloya dokunur: sipariş başlığı, satırlar, stok düşümü ve ödeme kaydı. Bu adımlardan biri yarıda kalırsa stok düşmüş ama sipariş oluşmamış olur. Transaction (işlem) bu adımları tek bir bütün hâline getirir: ya hepsi kaydedilir ya da hiçbiri.
Öne çıkan noktalar
- beginTransaction / commit: Aradaki tüm sorgular tek bir iş birimi olarak kaydedilir.
- rollBack: Herhangi bir hata olursa veritabanı işlem öncesindeki hâline döner.
- Koşullu güncelleme: stok >= ? koşulu, aynı anda gelen iki siparişin stoğu eksiye düşürmesini engeller.
- InnoDB: İşlem desteği için tablolar InnoDB motorunda olmalıdır; MyISAM işlem desteklemez.
- Kısa tutun: İşlem içinde dış API çağrısı ya da uzun hesaplama yapmayın; kilitler gereksiz uzar.
Uygulamalı örnek
Teoriyi somutlaştırmak için kısa bir PHP örneğine bakalım:
$pdo->beginTransaction();
try {
$pdo->prepare('INSERT INTO siparisler (uye_id, toplam) VALUES (?, ?)')->execute([$uyeId, $toplam]);
$siparisId = (int)$pdo->lastInsertId();
$stok = $pdo->prepare('UPDATE urunler SET stok = stok - ? WHERE id = ? AND stok >= ?');
foreach ($sepet as $urun) {
$stok->execute([$urun['adet'], $urun['id'], $urun['adet']]);
if ($stok->rowCount() === 0) throw new RuntimeException('Stok yetersiz: ' . $urun['ad']);
}
$pdo->commit();
} catch (Throwable $h) {
$pdo->rollBack();
throw $h;
}Örnek bilinçli olarak kısa tutuldu; gerçek projede hata yönetimi ve günlükleme gibi katmanlar eklenmelidir.
Canlı sunucuda display_errors kapalı olmalı; hataları kullanıcıya göstermek yerine günlüğe yazdırın.
Avantajları
Bu yaklaşımı benimsediğinizde elde edeceğiniz başlıca faydalar:
- Bakımı kolay ve okunur bir kod tabanı sağlar
- Farklı cihaz ve tarayıcılarda tutarlı sonuç verir
- Ekip içinde ortak bir uygulama standardı oluşturur
- Sayfa performansını ve kullanıcı deneyimini iyileştirir
Son söz
MySQL Transaction ile Tutarlı Sipariş Kaydı, küçük ama düzenli adımlarla ustalaşılan konulardan biri. Özellikle beginTransaction / commit ve Kısa tutun başlıklarını uygulamaya geçirmek iyi bir başlangıç olur.
İlgili içerikler:
- MySQL İndeksleri ile Sorgu Hızlandırma
- PHP ile Güvenli Oturum Yönetimi: 7 Altın Kural
- JavaScript Fetch API ve async/await ile Veri Çekme
Daha fazla uygulamalı içerik için Akademi derslerine ve blog yazılarına göz atabilirsiniz.
Yazar
Ferdi Giden @adminPHP, MySQL ve Tailwind ile kurumsal yazılımlar geliştiriyor; FerdiSoft çatısı altında ERP, WMS ve SaaS çözümleri üretiyor.