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