यदि मौजूद है तो किसी और इन्सर्ट को अपडेट करें


14

मैं एक बनाने की कोशिश कर रहा हूं STORED PROCEDUREजिसका उपयोग UPDATEएक तालिका के लिए किया जाएगा machine। इस तालिका में तीन स्तंभ हैं ( machine_id, machine_nameऔर reg_id)।

पूर्वोक्त तालिका में, reg_id( INT) एक कॉलम है जिसके मानों को a के लिए बदला जा सकता है machine_id

मैं जाँचना चाहूंगा QUERY/ चाहूंगी कि PROCEDUREअगर reg_idपहले से ही उस तालिका में मौजूद है। यदि ऐसा होता है, तो UPDATEवह पंक्ति, अन्यथा INSERTएक नई पंक्ति।

क्या कोई मुझे यह लिखने में मदद कर सकता है QUERY/ PROCEDURE?

जवाबों:


12

आशा है कि यह मदद करता है, प्रमुख कुंजी अद्यतन

create table machine(
  machine_id int not null primary key,
  machine_name varchar(50),
  reg_id int
);

insert into machine (machine_id, machine_name, reg_id)
values(1, 'my_machine', 1);

INSERT INTO machine (reg_id, machine_id, machine_name) VALUES (1, 1, 'test_machine')
  ON DUPLICATE KEY UPDATE machine_name=VALUES(machine_name);

SQL Fiddle पर काम करें


उन्हें भी जरूरत पड़ सकती है reg_id = VALUES(reg_id)
ypercube y

क्या होगा यदि हमारे पास क्वेरी पर दो स्थितियां हैं, मेरा मतलब है कि केवल कुंजी अद्वितीय नहीं है?
सैम

11

केवल समस्या है, आप इसे सामान्य क्वेरी की तरह उपयोग नहीं कर सकते। IF या WHILE जैसी नियंत्रण संरचनाएं केवल संग्रहीत कार्यविधियों या कार्यों में अनुमत हैं।

बस इस तरह एक प्रक्रिया बनाएँ:

delimiter $$
create procedure select_or_insert()
begin
  IF EXISTS (select * from users where username = 'something') THEN
    update users set id= 'some' where username = 'something';
  ELSE 
    insert into users (username) values ('something');
  END IF;
end $$
delimiter ;

और इसे इस तरह से कॉल करें:

call select_or_insert();

और हो गया


1
नमस्कार @ ताज़, क्या आप उस उत्तर की जाँच कर सकते हैं जो आप गए थे?
क्रेग एफ्रेइन

@ क्रैग एफ्रेइन हाय। मैं पहले वाले के साथ गया। आपका जवाब। एक बार फिर धन्यवाद।
ताज़

@ ताज़ मुझे खुशी है कि यह जानकारी उपयोगी है, कृपया यदि यह उत्तर आपके संदेह को दूर कर सकता है तो प्रश्न को बंद करने के लिए आगे बढ़ें।
बिल एन। वेरेली
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.