जवाबों:
MySQL INSERT सिंटैक्स WHERE क्लॉज का समर्थन नहीं करता है, क्योंकि आपकी क्वेरी के रूप में यह विफल हो जाएगा। मान लें कि आपका id
कॉलम अद्वितीय या प्राथमिक कुंजी है:
यदि आप ID 1 के साथ एक नई पंक्ति सम्मिलित करने का प्रयास कर रहे हैं तो आपको उपयोग करना चाहिए:
INSERT INTO Users(id, weight, desiredWeight) VALUES(1, 160, 145);
यदि आप ID के साथ मौजूदा पंक्ति के लिए वजन / वांछित मानों को बदलने का प्रयास कर रहे हैं, तो आपको उपयोग करना चाहिए:
UPDATE Users SET weight = 160, desiredWeight = 145 WHERE id = 1;
अगर आप चाहें तो INSERT का उपयोग भी कर सकते हैं .. DUPLICATE KEY सिंटैक्स पर जैसे:
INSERT INTO Users (id, weight, desiredWeight) VALUES(1, 160, 145) ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
या यहां तक कि ऐसा है:
INSERT INTO Users SET id=1, weight=160, desiredWeight=145 ON DUPLICATE KEY UPDATE weight=160, desiredWeight=145
यह भी ध्यान रखना महत्वपूर्ण है कि यदि आपका id
स्तंभ एक आटोइन्क्रिमेंट कॉलम है तो आप अपने INSERT से इसे एक साथ छोड़ सकते हैं और mysql को इसे सामान्य रूप में बढ़ा सकते हैं।
If you're trying to insert a new row with ID 1 you should be using
INSERT INTO का उल्लेख किया है । आपके मामले में जब आप ID 1 डालने की कोशिश कर रहे हैं, तो यह पहले से मौजूद है और यह एक प्राथमिक या अद्वितीय कुंजी है और विफल रहता है, इसलिए आपको या तो UPDATE सिंटैक्स या INSERT का उपयोग करना चाहिए .. ON
आप एक वाल्व खंड के साथ WHERE क्लॉज़ को संयोजित नहीं कर सकते। आपके पास दो विकल्प हैं जहां तक मुझे जानकारी है-
मूल्यों को निर्दिष्ट करना
INSERT INTO Users(weight, desiredWeight)
VALUES (160,145)
चयन कथन का उपयोग कर INSERT
INSERT INTO Users(weight, desiredWeight)
SELECT weight, desiredWeight
FROM AnotherTable
WHERE id = 1
आप अद्यतन प्रश्नों के लिए WHERE क्लॉज का उपयोग करते हैं। जब आप INSERT करते हैं, तो आप मान रहे हैं कि पंक्ति मौजूद नहीं है।
ओपी का बयान तब बनेगा;
अद्यतन उपयोगकर्ता वजन = 160, वांछित = 45 जहां आईडी = 1;
MySQL में, यदि आप INSERT या UPDATE करना चाहते हैं, तो आप WHERE क्लॉज़ के साथ REPLACE क्वेरी का उपयोग कर सकते हैं। यदि मौजूद नहीं है, तो यह सम्मिलित है, अन्यथा यह अद्यतन करता है।
संपादित करें
मुझे लगता है कि बिल कारविन की बात महत्वपूर्ण है कि वह टिप्पणियों से बाहर आए और इसे स्पष्ट करें। धन्यवाद बिल, जब से मैंने MySQL के साथ काम किया है, तब तक बहुत समय हो चुका है, मुझे याद आया कि मेरे पास REPLACE के साथ समस्याएँ थीं, लेकिन मैं भूल गया कि वे क्या थे। मुझे इसे देखना चाहिए था।
ऐसा नहीं है कि MySQL का REPLACE कैसे काम करता है। यह एक DELETE करता है (यदि पंक्ति मौजूद नहीं है, तो INSERT द्वारा अनुसरण किया जा सकता है)। परिणाम दृष्टि के बारे में सोचो। ट्रिगर और विदेशी प्रमुख निर्भरताएँ। इसके बजाय, INSERT ... ON DUPLICATE KEY UPDATE का उपयोग करें।
शर्तें लागू होती हैं क्योंकि आप उप-चयन कथनों के लिए स्थिति का उपयोग कर सकते हैं। आप उप-चयन का उपयोग करके जटिल आवेषण प्रदर्शन कर सकते हैं।
उदाहरण के लिए:
INSERT INTO suppliers
(supplier_id, supplier_name)
SELECT account_no, name
FROM customers
WHERE city = 'Newark';
इंसर्ट स्टेटमेंट में "सिलेक्ट" करके, आप कई बार मल्टीपल इंसर्ट कर सकते हैं।
इस प्रकार की प्रविष्टि के साथ, आप सम्मिलित की जा रही पंक्तियों की संख्या की जाँच करना चाह सकते हैं। आप सम्मिलित करने से पहले निम्न SQL कथन को चलाकर पंक्तियों की संख्या निर्धारित कर सकते हैं।
SELECT count(*)
FROM customers
WHERE city = 'Newark';
आप यह सुनिश्चित कर सकते हैं कि आप EXISTS स्थिति का उपयोग करके डुप्लिकेट जानकारी न डालें।
उदाहरण के लिए, यदि आपके पास क्लाइंट की प्राथमिक कुंजी वाली क्लाइंट नाम की एक तालिका थी, तो आप निम्न कथन का उपयोग कर सकते हैं:
INSERT INTO clients
(client_id, client_name, client_type)
SELECT supplier_id, supplier_name, 'advertising'
FROM suppliers
WHERE not exists (select * from clients
where clients.client_id = suppliers.supplier_id);
यह कथन एक सबसेलेक्ट के साथ कई रिकॉर्ड सम्मिलित करता है।
यदि आप एक भी रिकॉर्ड सम्मिलित करना चाहते हैं, तो आप निम्नलिखित कथन का उपयोग कर सकते हैं:
INSERT INTO clients
(client_id, client_name, client_type)
SELECT 10345, 'IBM', 'advertising'
FROM dual
WHERE not exists (select * from clients
where clients.client_id = 10345);
दोहरी तालिका का उपयोग आपको चुनिंदा कथन में अपने मूल्यों को दर्ज करने की अनुमति देता है, भले ही मान वर्तमान में किसी तालिका में संग्रहीत न हों।
यह भी देखें कि किस खंड के साथ कैसे सम्मिलित किया जाए
इस प्रश्न का सही उत्तर इस प्रकार होगा:
ए)। अगर डालने से पहले चयन करना चाहते हैं:
INSERT INTO Users( weight, desiredWeight )
select val1 , val2 from tableXShoulatNotBeUsers
WHERE somecondition;
ख)। IF रिकॉर्ड पहले से ही डालने के बजाय अद्यतन का उपयोग करें:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
होना चाहिए
Update Users set weight=160, desiredWeight=145 WHERE id = 1;
सी)। यदि आप एक ही समय में अपडेट या सम्मिलित करना चाहते हैं
Replace Users set weight=160, desiredWeight=145 WHERE id = 1;
Note):- you should provide values to all fields else missed field in query
will be set to null
घ)। यदि आप SAME तालिका से रिकॉर्ड रिकॉर्ड करना चाहते हैं, तो बस याद रखें कि आप उस तालिका से चयन नहीं कर सकते हैं जिसमें आप इसलिए सम्मिलित कर रहे हैं
create temporary table xtable ( weight int(11), desiredWeight int(11) ;
insert into xtable (weight, desiredWeight)
select weight, desiredWeight from Users where [condition]
insert into Users (weight, desiredWeight)
select weight , desiredWeight from xtable;
मुझे लगता है कि यह सुंदर परिदृश्यों को कवर करता है
जब आप INSERT स्टेटमेंट कर रहे हों, तब आप इसका उपयोग नहीं कर सकते हैं:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
होना चाहिए:
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 );
WHERE का हिस्सा केवल SELECT स्टेटमेंट में काम करता है:
SELECT from Users WHERE id = 1;
या अपडेट स्टेटमेंट्स में:
UPDATE Users set (weight = 160, desiredWeight = 145) WHERE id = 1;
आप उपयोगकर्ता इनपुट के आधार पर सशर्त INSERT कर सकते हैं। यह क्वेरी तभी डालेगी जब इनपुट वर्जन '$ userWeight' और '$ userDesiredWeight' रिक्त न हों
INSERT INTO Users(weight, desiredWeight )
select '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
यह उस स्थिति पर निर्भर करता है जिसमें INSERT वास्तव में एक खंड हो सकता है।
उदाहरण के लिए यदि आप किसी फॉर्म से मान मिलान कर रहे हैं।
Consider INSERT INTO Users(name,email,weight, desiredWeight) VALUES (fred,bb@yy.com,160,145) WHERE name != fred AND email != bb@yy.com
समझ में नहीं आता है?
IF का उपयोग करने का सबसे सरल तरीका है कि आप अपने मुख्य अवरोध का उल्लंघन करें। यह केवल INSERT IGNORE के लिए काम करता है, लेकिन आपको INSERT में बाधा का उपयोग करने की अनुमति देगा।
INSERT INTO Test (id, name) VALUES (IF(1!=0,NULL,1),'Test');
उपरांत WHERE
क्लॉज़ के आपने एक शर्त रखी, और इसका उपयोग डेटा लाने या पंक्ति को अद्यतन करने के लिए किया जाता है। जब आप डेटा सम्मिलित कर रहे हैं, तो यह माना जाता है कि पंक्ति मौजूद नहीं है।
तो, सवाल यह है कि क्या कोई पंक्ति है जिसकी आईडी 1 है? यदि हां, तो MySQL UPDATE का उपयोग करें , अन्यथा MySQL INSERT का उपयोग करें ।
यदि आप UPDATE
स्टेटमेंट के बजाय स्टेटमेंट का उपयोग करने के लिए डेटा को बेहतर तरीके से सम्मिलित करने के लिए कोई विशेष रिकॉर्ड नहीं निर्दिष्ट कर रहे हैं INSERT
।
इस प्रकार की क्वेरी आपने प्रश्न में लिखी है, एक डमी क्वेरी की तरह है।
आपका प्रश्न है: -
INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
यहां, आप आईडी = 1 को निर्दिष्ट कर रहे हैं, इसलिए बेहतर है कि आप UPDATE
मौजूदा रिकॉर्ड को अपडेट करने के लिए स्टेटमेंट का उपयोग करें। यह सलाह नहीं दी जाती है WHERE
कि INSERT
आप के मामले में क्लॉज का उपयोग करें । आपको उपयोग करना चाहिए।UPDATE
। । आपको ।
अब अपडेट क्वेरी का उपयोग करना: -
UPDATE Users SET weight=160,desiredWeight=145 WHERE id=1;
क्या वास्तव में किसी भी मामले में INSERT-INTO-VALUES के साथ WH-clause का उपयोग किया जा सकता है?
उत्तर निश्चित रूप से नहीं है।
INSERT INTO ... VALUES ... के बाद WHERE क्लॉज जोड़ना अमान्य SQL है, और पार्स नहीं होगा।
MySQL द्वारा दी गई त्रुटि है:
mysql> INSERT INTO Users( weight, desiredWeight ) VALUES ( 160, 145 ) WHERE id = 1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id = 1' at line 1
त्रुटि संदेश का सबसे महत्वपूर्ण हिस्सा है
... syntax to use near 'WHERE id = 1' ...
जो विशिष्ट हिस्से को दिखाता है कि पार्सर को यहां खोजने की उम्मीद नहीं थी: जहां क्लॉज है।
जहाँ तक मैं जानता हूँ कि आप इस क्वेरी में WHERE क्लॉज़ नहीं जोड़ सकते। शायद मैं अपनी एसक्यूएल भी भूल गया हूं, क्योंकि मुझे वास्तव में यकीन नहीं है कि आपको इसकी आवश्यकता क्यों है।
इंसर्ट स्टेटमेंट में आपको कहां इस्तेमाल नहीं करना चाहिए। यदि आप करना चाहते हैं, तो अपडेट स्टेटमेंट में इन्सर्ट का उपयोग करें और फिर किसी मौजूदा रिकॉर्ड को अपडेट करें।
वास्तव में मैं जान सकता हूँ कि आपको इन्सर्ट स्टेटमेंट में एक क्लॉज़ की आवश्यकता क्यों है ??
शायद इस कारण के आधार पर मैं आपको एक बेहतर विकल्प सुझा सकता हूँ।
मुझे लगता है कि आपका सबसे अच्छा विकल्प INSERT के बजाय REPLACE का उपयोग करना है
REPLACE INTO उपयोगकर्ता (आईडी, वजन, वांछित) VALUES (1, 160, 145);
इसका कोई मतलब नहीं है ... यहां तक कि सचमुच
INSERT
का मतलब है एक जोड़ने के लिए new row
और जब आप कहते हैं कि WHERE
आप परिभाषित करते हैं कि आप किस पंक्ति के बारे में बात कर रहे हैं SQL
।
तो एक मौजूदा पंक्ति पर एक शर्त के साथ एक नई पंक्ति जोड़ना संभव नहीं है।
आपको निम्नलिखित में से चुनना होगा:
ए के UPDATE
बजाय का उपयोग करेंINSERT
B. क्लॉज का उपयोग करें INSERT
और निकालें WHERE
(मैं सिर्फ यह कह रहा हूं ...) या यदि आप उपयोग करने के लिए बाध्य हैं INSERT
और WHERE
एक ही बयान में इसे केवल INSERT..SELECT क्लॉज के माध्यम से किया जा सकता है ...
INSERT INTO Users( weight, desiredWeight )
SELECT FROM Users WHERE id = 1;
लेकिन यह एक पूरी तरह से अलग उद्देश्य प्रदान करता है और अगर आपने आईडी को प्राथमिक कुंजी के रूप में परिभाषित किया है तो यह प्रविष्टि विफल हो जाएगी, अन्यथा एक नई पंक्ति = 1 के साथ डाली जाएगी।
मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मुझे उम्मीद है कि यह अभी भी किसी न किसी की मदद करेगा, जो मुझे आशा है कि एक सरल उदाहरण है:
पृष्ठभूमि:
मेरे पास कई मामलों में एक था: एक ही उपयोगकर्ता को कई बार कई मूल्यों के साथ सूचीबद्ध किया जाता है और मैं एक नया रिकॉर्ड बनाना चाहता था, इसलिए UPDATE को मेरे मामले में कोई मतलब नहीं होगा और मुझे किसी विशेष उपयोगकर्ता को संबोधित करने की आवश्यकता थी जैसे मैं करूंगा WHERE क्लॉज का उपयोग करना।
INSERT into MyTable(aUser,aCar)
value(User123,Mini)
इस निर्माण का उपयोग करके आप वास्तव में एक विशिष्ट उपयोगकर्ता (user123, जिनके पास अन्य रिकॉर्ड हैं) को लक्षित करते हैं, इसलिए आपको वास्तव में एक खंड, Ickon की आवश्यकता नहीं है।
उत्पादन हो सकता है:
aUser aCar
user123 mini
user123 HisOtherCarThatWasThereBefore
पोस्ट विधि का उपयोग करके mysql डालने के लिए सही वाक्यविन्यास है:
$sql="insert into ttable(username,password) values('$_POST[username]','$_POST[password]')";
INSERT INTO Users(weight, desiredWeight )
SELECT '$userWeight', '$userDesiredWeight'
FROM (select 1 a ) dummy
WHERE '$userWeight' != '' AND '$userDesiredWeight'!='';
आप INSERT और WHERE का एक साथ उपयोग नहीं कर सकते। आप नीचे दिए गए कोड जैसे विशेष क्षेत्र में विशेष कॉलम में मूल्य जोड़ने के लिए UPDATE क्लॉज का उपयोग कर सकते हैं;
UPDATE Users
SET weight='160',desiredWeight ='145'
WHERE id =1
मुझे लगता है कि एक निर्दिष्ट पंक्ति पर एक मूल्य सम्मिलित करने का सही रूप है:
UPDATE table SET column = value WHERE columnid = 1
यह काम करता है, और यदि आप Microsoft SQL सर्वर पर लिखते हैं तो यह समान है
INSERT INTO table(column) VALUES (130) WHERE id = 1;
mysql पर आपको टेबल अपडेट करना होगा।