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