2010-04-30 8 views
7

में बदलें, यदि मेरे पास दो फ़ील्ड हैं, तो बदलें। प्रथम नाम अंतिम नाम। तालिका में जॉन स्मिथ है, अगर मैं tblNames (फर्स्टनाम, लास्टनाम) VALUES (जॉन, जोन्स) में रिलीज को चलाने के लिए था, तो क्या स्मिथ को जोन्स के साथ बदल देगा, या नया नाम बनायेगा?SQL में प्रश्न

क्या निर्धारित करता है कि यह एक अद्यतन है या सम्मिलित है?

उत्तर

0

यह इस बात पर निर्भर करता है कि तालिका में प्राथमिक कुंजी और/या अद्वितीय बाधाएं क्या हैं। यदि कोई प्राथमिक कुंजी या अद्वितीय बाधा नहीं है, तो यह मूल INSERT कथन से अलग नहीं है। http://dev.mysql.com/doc/refman/5.0/en/replace.html

0

डालने के लिए दो अलग-अलग ऑपरेटरों रहे हैं और अद्यतन

update tblNames set FirstName="John", LastName="Smith" where FirstName="John" and LastName="Jones" 

इस जॉन स्मिथ के लिए जॉन जोन्स का नाम बदल देगा

insert into tblNames (FirstName, LastName) values ("John", "Smith") 

इस वसीयत:

प्रलेखन एक यथोचित स्पष्ट विवरण देता है एक नई प्रविष्टि जोड़ें (लेकिन तालिका में जॉन स्मिथ पहले से ही विफल हो सकता है और फर्स्टनाम/लास्टनाम पर एक अनूठी बाधा है)

+0

जब मैं जवाब दे रहा था वहां कोई "mysql" टैग नहीं था, इसलिए मेरे कोड नमूने मानक एसक्यूएल – UserControl

+0

हैं यदि रिकॉर्ड पहले से मौजूद है तो सम्मिलित करने में त्रुटि से बचने का कोई तरीका है? – Matt

+0

आप अपडेट या डालने से पहले प्रविष्टि पहले से मौजूद है या नहीं, यह जांचने के लिए आप 'चयन' कर सकते हैं। MySQL के बारे में निश्चित नहीं है लेकिन SQL सर्वर में आप भी चयन से बच सकते हैं। विशिष्ट परिदृश्य: अद्यतन tblNames सेट ... जहां कुंजी शर्त अगर @@ rowcount = 0 - पिछले बयान से प्रभावित पंक्तियों की संख्या tblNames में (यानी अद्यतन) डालने .... माफ करना, देर से उत्तर के लिए, उम्मीद है कि यह – UserControl

8
REPLACE 
INTO tblNames (FirstName, LastName) 
VALUES ('John', 'Jones') 

अगर वहाँ FirstName, LastName या उनके संयोजन पर किसी भी तरह का एक अनूठा बाधा है, और यह उल्लंघन किया जाता है, रिकॉर्ड नष्ट करने और नए मूल्यों के साथ डाला जाता है।

रिकॉर्ड यदि कोई भी शर्त संतुष्ट हो जाता है प्रतिस्थापित किया जाएगा:

  • FirstNameUNIQUE है और वहाँ तालिका में एक John है,
  • LastNameUNIQUE है और वहाँ तालिका में एक Jones है,
  • FirstName, LastnameUNIQUE है और तालिका में John Jones है।

ध्यान दें कि REPLACE आपरेशन संभवतः एक DELETE जो हमेशा तालिका को प्रभावित करेगा निम्नलिखित एक INSERT है।

MySQL के नए संस्करणों में, आपको INSERT … ON DUPLICATE KEY UPDATE का उपयोग करना चाहिए।

+0

में मदद करता है, इसलिए यदि जॉन स्मिथ टेबल में है, और मैं जॉन जोन्स भेजता हूं, तो मैं किस एसक्यूएल कमांड का उपयोग करता हूं ताकि यह जॉन जोन्स को सम्मिलित कर सके, लेकिन अगर मैं जॉन स्मिथ भेजता हूं, तो यह कुछ भी नहीं करता है। – Matt

+0

@ मैट: कृपया 'SHOW CREATE TABLE TblNames' के आउटपुट को पोस्ट करें – Quassnoi

+0

अभी तक तालिका नहीं है ..यह काल्पनिक योजना है :) – Matt

संबंधित मुद्दे