पाया जाता है, तो अक्सर, मैं अपने उपयोगकर्ताओं में से एक पर एक क्वेरी चलाने के लिए चाहता हूं जहां मैं उस उपयोगकर्ता के साथ संग्रहीत और संबंधित एक पंक्ति चाहता हूं, एक 1 से 1 रिश्ते। तो मान लें (यह सिर्फ एक मनमाना उदाहरण है), कि मेरे पास एक टेबल है जो कार के बारे में कुछ जानकारी के साथ उपयोगकर्ता की कार का ट्रैक रखती है। प्रत्येक उपयोगकर्ता के पास 0 या 1 कार हो सकती है। यदि उपयोगकर्ता की कोई कार नहीं है, तो उस उपयोगकर्ता के लिए तालिका में कोई प्रविष्टि नहीं है।MySQL "अच्छा" तरीका एक पंक्ति डालने के लिए नहीं मिला है, या इसे
कारों तालिका (फिर से, बस एक उदाहरण): आईडी, user_id, car_make, car_model
तो, जब मैं इस तालिका अद्यतन करते हैं, मैं हमेशा इस (छद्म कोड) की तरह कुछ कर रही अंत:
result = SELECT * FROM cars WHERE user_id=5
if (num_rows(result)>0){
UPDATE cars SET car_make='toyota', car_model='prius' WHERE user_id=5
}else{
INSERT INTO cars (user_id, car_make, car_model) VALUES (5, 'toyota', 'prius')
}
मैं इसे एक सुंदर कथन में कैसे बना सकता हूं जो "परमाणु रूप से" काम करता है? क्या होता है, अगर किसी अन्य प्रक्रिया में, पंक्ति को चयन और अद्यतन विवरणों के बीच हटा दिया जाता है? मेरा अद्यतन कथन विफल हो जाएगा जहां INSERT कथन चलाना चाहिए था। और मुझे लगता है कि मुझे एक ही चीज़ को पूरा करने के लिए दो समान (लेकिन अलग) बयान करने की ज़रूरत है! मुझे जो कुछ चाहिए वह कुछ बयान है जो मुझे आश्वस्त करेगा कि मैं जो डेटा चाहता हूं वह तालिका में मौजूद है, खासकर जब मैं केवल 1 पंक्ति चाहता हूं जो मेरी आवश्यकता को पूरा करे।
MAKE SURE A ROW IN cars WHERE user_id=5 IS SET WITH car_make='toyota', car_model='prius'
इस तरह, यदि 5 user_id पहले से मौजूद है, यह अद्यतन किया जाएगा, अन्यथा, यह डाला जाएगा: उदाहरण के लिए, यह की तरह कुछ (बेशक यह पूरी तरह से किया जाता है बना-अप) हो सकता है। इसके अलावा, अगर मैं आवश्यकताओं बदल गया है, उदाहरण के कहने के लिए प्रत्येक उपयोगकर्ता किसी दिए गए car_make के शून्य या एक कारों हो सकता है के लिए, तो मैं आगे कहा कि निर्दिष्ट कर सकते हैं:
MAKE SURE A ROW IN cars WHERE user_id=5 AND car_make='toyota' IS SET WITH car_model='prius'
मुझे आशा है कि मेरे सवाल समझ में आता है! मैं इस बुनियादी सम्मिलन को कैसे सुधार सकता हूं-अगर नहीं मिला या अद्यतन-अगर-पाया गया ऑपरेशन जो अक्सर आता है? किसी भी मदद के लिए धन्यवाद!