Yazma işlemine başlamadan önce hangi kaydı oluşturacağınızı veya değiştireceğinizi, gelen alanların hangi sütunlara karşılık geldiğini ve aynı mesaj tekrar geldiğinde ne yapılacağını belirleyin. Bağlantının okuma yapabilmesi INSERT veya UPDATE yetkisi olduğu anlamına gelmez.
1. Gelen veriyi tabloyla eşleştirin
Zorunlu alanları, veri tiplerini, boş değerleri ve veritabanının otomatik ürettiği alanları belirleyin. JSON alanı ile sütun adının aynı olması gerekmez; sorguda hangi değerin nereye yazılacağını siz seçersiniz.
JSON metniyle çalışıyorsanız alanları kullanmadan önce Unmarshal yapın. Gereken alanları yazmadan önce doğrulayın. API’de request sözleşmesi yardımcı olur; dosya veya kuyruktan gelen mesaj için o girişin doğrulaması gerekir. Veritabanındaki benzersizlik, foreign key ve check kuralları da kalır; uygulama doğrulaması bunları gereksiz yapmaz.
2. INSERT adımını kurun
- Designer içinde yazmanın yapılacağı yere SQL adımı ekleyin.
- Data Source alanında hedef bağlantıyı seçin.
- Query alanına kendi tablo ve sütunlarınızla INSERT sorgusunu yazın.
- Gelen değerleri
:#alanAdıgibi parametrelerle bağlayın; metin birleştirmeyin. - Sonrasında yazma sonucunu değerlendiren adımı ekleyin.
Bir INSERT’in başarılı olmasıyla oluşan kaydın kimliğini elde etmek ayrı konulardır. İş kimliği girişten geliyorsa bu değeri işlem boyunca koruyabilirsiniz. Kimliği veritabanı üretiyorsa sürücünüzün üretilen anahtar desteğini veya o veritabanının uygun dönüş yöntemini kullanmanız gerekir. Örnekteki iş kimliği yaklaşımını bütün tablolara aynen uygulamayın.
3. UPDATE’in hangi kaydı değiştireceğini sınırlandırın
UPDATE sorgusundaki WHERE, güncellemenin kapsamıdır. İş kimliğine ek olarak gereken durum veya sürüm koşulunu koyun. Kullanıcı tek kayıt değiştirmek istiyorsa koşulsuz UPDATE veya birden çok satırı eşleyen filtre bu iş için uygun değildir.
Başka bir işlem, sizin okumanızla yazmanız arasında kaydı değiştirebilir. Böyle bir durumda son değeri sessizce ezmek istemiyorsanız bir sürüm alanı kullanabilirsiniz: güncelleme yalnızca okuduğunuz sürüm hâlâ geçerliyken yapılır, başarılı değişiklik sürümü artırır. Buna iyimser kilitleme denir. Sonuç sıfır satırsa kaydı tekrar okuyup karar verin; beklenen sürümü körlemesine artırıp yeniden göndermeyin.
Her tabloda sürüm sütunu bulunmaz. Varsa mevcut şemanın sağladığı mekanizmayı kullanın; yoksa kaydın beklenen durumu, uygun kilitleme veya şema değişikliği konusunda veritabanından sorumlu kişiyle karar verin.
4. Değişen satır sayısını kontrol edin
SQL yazma adımı CamelSqlUpdateCount header’ıyla etkilenen satır sayısını bildirir. Bunu hemen sonraki Choice adımında iş beklentinize göre değerlendirin; daha sonraki SQL adımı değeri değiştirebilir.
| Sonuç | Nasıl yorumlanır? |
|---|---|
0 | Filtreye uyan kayıt yok, durum/sürüm değişmiş veya sorgunun çatışma davranışı yazmayı atlamış olabilir |
1 | Tek kayıt beklenen işte olağan sonuç; işin kalıcı durumunu gerektiğinde tekrar okuyun |
| Birden fazla | Toplu işte normal olabilir; tek kayıt bekliyorsanız filtreyi ve sonucu araştırın |
Sürücü/veritabanı, değeri aynı kalan bir UPDATE için “eşleşen” veya “gerçekten değişen” satır sayısını farklı yorumlayabilir. Kendi sorgunuzu hedef veritabanında doğrulayın. Etkilenen satır sayısını bilmeden her yanıtı “güncellendi” diye sunmayın.
5. Tekrar gelen mesajın davranışını belirleyin
Bir istemci yanıtı alamadığı için aynı işlemi yeniden gönderebilir. Önce SELECT yapıp kaydı görememek, ardından INSERT yapmak eşzamanlı iki istekte çift kayıt riskini tek başına çözmez. İşin kimliği veritabanında uygun bir benzersiz kuralla korunmalıdır.
Çatışmada ne olacağı iş kararınızdır: mevcut kaydı döndürmek, tekrar isteğini reddetmek veya belirli alanları güncellemek. ON CONFLICT, MERGE gibi sözdizimleri ve davranışları veritabanına göre değişir. Bir örnekte kullanılan ifadeyi başka ürüne doğrudan taşımayın. Tekrar deneme ve idempotency bölümünde karar noktaları açıklanır.
6. Birden fazla yazma varsa birlikte değerlendirin
Aynı iş hem ana kaydı hem ayrıntılarını değiştiriyorsa, ikinci adımın hatasında ilk adımın kalıcı kalıp kalamayacağını sorun. Kalması kabul edilmiyorsa yazmaları aynı transaction içine alın. Hata yakalamak veya hata yanıtı üretmek, önceki yazmaları kendiliğinden geri almaz.
İlk denemeyi kontrollü veride yapın. İşlemden sonra ayrı bir okuma ile doğru kaydın, doğru alanların ve beklenen sayıda satırın değiştiğini doğrulayın. Hatalı girdi, tekrar mesaj ve bulunmayan kayıt durumlarını da deneyin.
Ekranları ve sonuçları hazır bir projede görmek için sipariş ekleme ve iptal örneğini kullanabilirsiniz.