INSERT ... ON DUPLICATE KEY UPDATE का उपयोग करके: यदि यूनिक/प्राइमरी की टकराव होता है तो नई पंक्ति डालने के बजाय मौजूदा पंक्ति अपडेट करें (अपसर्ट/upsert)।
टेबल बनाएं (यूनिक की पर FirstName)
mysql> CREATE TABLE DemoTable1891 (
FirstName VARCHAR(20),
UNIQUE KEY(FirstName)
);
डालें/अपडेट करें
mysql> INSERT INTO DemoTable1891 VALUES('Chris') ON DUPLICATE KEY UPDATE FirstName = 'Robert'; -- नई
mysql> INSERT INTO DemoTable1891 VALUES('David') ON DUPLICATE KEY UPDATE FirstName = 'Robert'; -- नई
mysql> INSERT INTO DemoTable1891 VALUES('Chris') ON DUPLICATE KEY UPDATE FirstName = 'Robert'; -- डुप्लिकेट → अपडेट
परिणाम:
+-----------+ | FirstName | +-----------+ | David | | Robert | +-----------+
व्याख्या
- पहली 'Chris' → डाली गई।
- 'David' → डाली गई।
- दूसरी 'Chris' → यूनिक की टकराव →
UPDATE FirstName = 'Robert'실행 → 'Chris' → 'Robert' बदला।
प्रभावित पंक्ति संख्या
- नई पंक्ति: 1
- अपडेट: 2
- कोई बदलाव नहीं: 0
एकाधिक कॉलम अपडेट
INSERT INTO users(id, name, email, updated_at)
VALUES(1, 'John', 'john@new.com', NOW())
ON DUPLICATE KEY UPDATE
name = VALUES(name),
email = VALUES(email),
updated_at = VALUES(updated_at);
VALUES() फ़ंक्शन
VALUES(col) → INSERT में दिए गए मान को संदर्भित करता है (पुनरावृत्ति बचाता है)।
सावधानी
- यूनिक/प्राइमरी की बाधा आवश्यक।
- ट्रिगर: BEFORE INSERT, BEFORE UPDATE दोनों फायर होते हैं।
- आत्म-वृद्धि आईडी पर टकराव होने पर आईडी "छोड़" दी जाती है (गैप)।