SORU
27 Mart 2009, Cuma


Ne kadar öyle olmasa eğer tablo ya da EKLE bir satır UPDATE't var mı?

Sayaç Aşağıdaki tablo var:

CREATE TABLE cache (
    key text PRIMARY KEY,
    generation int
);

Sayaçların bir artış veya ilgili satır henüz mevcut değilse bile sıfıra ayarlamak istiyorum. Bir şekilde standart SQL eşzamanlılık sorunları olmadan bunu yapmak için var mı? Bu işlem bazen bir işlemin bir parçası, bazen ayrı.

SQL mümkünse SQLite, PostgreSQL ve MySQL üzerinde değiştirilmemiş çalıştırmak gerekir.

Bir arama ya da eşzamanlılık sorunları muzdarip olan birçok fikir vermiştir, ya da bir veritabanı özeldir:

  • 3* *yeni bir satır için deneyin, ve eğer bir hata varsa, UPDATE. Ne yazık ki, INSERT hata geçerli işlemi iptal eder.

  • Eğer hiçbir satır INSERT değiştirildi UPDATE satır ve yeni bir satır.

  • MySQL ON DUPLICATE KEY UPDATE bir fıkra vardır.

EDİT: tüm büyük cevaplar için Teşekkürler. Paul haklı gibi görünüyor, ve bunu yapmanın tek ve taşınabilir bir yolu yok. Bu çok basit bir operasyon gibi geliyor bana oldukça şaşırtıcı.

CEVAP
27 Mart 2009, Cuma


MySQL (ve daha sonra) SQLite da sözdizimi İÇİNE DEĞİŞTİRİN desteği:

REPLACE INTO my_table (pk_id, col1) VALUES (5, '123');

Bu otomatik olarak birincil anahtar tanımlar ve eğer hiçbiri bulunursa eşleşen bir satır, yeni bir tane ekleme güncelleme için bulur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ASUS

    ASUS

    22 EKİM 2005
  • ehowhome

    ehowhome

    22 NİSAN 2009
  • WOSU Public Media

    WOSU Public

    23 AĞUSTOS 2007