विचार करें
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
चूंकि कोई डुप्लीकेट (दोनों चाबियों पर) नहीं मिला है।