Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

एकाधिक अद्वितीय फ़ील्ड के लिए ON DUPLICATE KEY UPDATE का MySQL व्यवहार

विचार करें

INSERT INTO table (a,b,c) VALUES (1,2,3)
    -> ON DUPLICATE KEY UPDATE c=c+1;

अगर a और b UNIQUE हैं फ़ील्ड, UPDATE a = 1 OR b = 2 . पर होता है . साथ ही जब कंडीशन a = 1 OR b = 2 दो या अधिक प्रविष्टियों से मिलता है, अद्यतन केवल एक बार किया जाता है।

यहां आईडी और नाम के साथ टेबल टेबल UNIQUE फ़ील्ड

Id     Name     Value 
1      P        2 
2      C        3 
3      D        29 
4      A        6

अगर क्वेरी है

INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7);

तब हमें मिलता है

Id     Name     Value 
1      P        2 
2      C        3 
3      D        29 
4      A        6
1      C        7

जो आईडी और नाम की विशिष्टता का उल्लंघन करता है। अब

. के साथ
INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;

हमें मिलता है

Id     Name     Value 
1      P        7 
2      C        7 
3      D        29 
4      A        6

एकाधिक कुंजियों पर व्यवहार निम्न है

UPDATE में ON DUPLICATE KEY UPDATE निष्पादित किया जाता है यदि UNIQUE . में से कोई एक फ़ील्ड डालने के लिए मान के बराबर है। यहां, UPDATE Id = 1 OR Name = C . पर किया जाता है . यह

. के बराबर है
UPDATE table 
SET Value = 7
WHERE Id = 1 OR Name = C;

क्या होगा यदि मुझे किसी एक कुंजी के लिए केवल एक अपडेट चाहिए

UPDATE का उपयोग कर सकते हैं LIMIT . के साथ स्टेटमेंट कीवर्ड

UPDATE table 
SET Value = 7
WHERE Id = 1 OR Name = C
LIMIT 1;

जो देगा

Id     Name     Value 
1      P        7 
2      C        3 
3      D        29 
4      A        6

क्या होगा यदि मैं केवल एक अपडेट चाहता हूं यदि दोनों चाबियों के मान मेल खाते हैं

एक समाधान है ALTER TABLE और PRIMARY KEY बनाएं (या विशिष्टता) दोनों क्षेत्रों में काम करते हैं।

ALTER TABLE table 
DROP PRIMARY KEY,
ADD PRIMARY KEY (Id, Name);

अब, पर

INSERT INTO table (Id, Name, Value)
VALUES (1, C, 7)
ON DUPLICATE KEY UPDATE Value = 7;

हमें मिलता है

Id     Name     Value 
1      P        2 
2      C        3 
3      D        29 
4      A        6
1      C        7

चूंकि कोई डुप्लीकेट (दोनों चाबियों पर) नहीं मिला है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अपना खुद का TinyURL बनाना

  2. MySQL की SQL विशिष्ट प्रोग्रामिंग भाषा का नाम क्या है?

  3. MySQL में नंबर टेबल बनाना

  4. MySQL:रैंडम एंट्री का चयन करें, लेकिन कुछ प्रविष्टियों की ओर वजन

  5. कनेक्शन प्राप्त करना विफल:php_network_getaddresses:getaddrinfo विफल:नाम या सेवा ज्ञात नहीं है