मेरे पास काउंटरों की निम्न तालिका है:
CREATE TABLE cache (
key text PRIMARY KEY,
generation int
);
मैं काउंटरों में से एक को बढ़ाना चाहूंगा, या इसे शून्य पर सेट कर सकता हूं यदि संबंधित पंक्ति अभी तक मौजूद नहीं है। वहाँ मानक SQL में समसामयिक मुद्दों के बिना ऐसा करने का एक तरीका है? ऑपरेशन कभी-कभी लेनदेन का हिस्सा होता है, कभी-कभी अलग होता है।
यदि संभव हो तो SQL को SQLite, PostgreSQL और MySQL पर अनमॉडिफाइड चलाना चाहिए।
एक खोज ने कई विचारों को जन्म दिया जो या तो समसामयिक मुद्दों से ग्रस्त हैं, या एक डेटाबेस के लिए विशिष्ट हैं:
INSERT
एक नई पंक्ति के लिए प्रयास करें , औरUPDATE
यदि कोई त्रुटि थी। दुर्भाग्य से,INSERT
वर्तमान लेनदेन को रद्द करने में त्रुटि ।UPDATE
पंक्ति, और यदि कोई पंक्तियों को संशोधित नहीं किया गया था, तोINSERT
एक नई पंक्ति।MySQL का एक
ON DUPLICATE KEY UPDATE
क्लॉज है।
संपादित करें: सभी महान उत्तरों के लिए धन्यवाद। ऐसा लगता है कि पॉल सही है, और ऐसा करने का एक भी, पोर्टेबल तरीका नहीं है। यह मेरे लिए काफी आश्चर्यजनक है, क्योंकि यह एक बहुत ही बुनियादी ऑपरेशन की तरह लगता है।