ON CONFLICT (Upsert) का उपयोग
ON CONFLICT एक INSERT को existing row update करने या जब एक unique key already exist करे कुछ नहीं करने देता है।
In this page:
Syntax
INSERT INTO table_name (key_column, column2)
VALUES (value1, value2)
ON CONFLICT (key_column)
DO UPDATE SET column2 = EXCLUDED.column2;
ON CONFLICT (Upsert)
INSERT ... ON CONFLICT (column) DO UPDATE SET ... एक row insert करता है या existing वाली update करता है, जो एक upsert है। DO NOTHING चुपचाप insert skip करता है।
DO UPDATE के अंदर special EXCLUDED table उन values को refer करता है जिन्हें आपने insert करने की कोशिश की थी। Conflict target के पास एक unique index या constraint होनी चाहिए। यह syntax modern SQLite पर भी काम करता है।
Note:
EXCLUDED.column failed insert से value hold करता है।
उदाहरण: ON CONFLICT (upsert)
CREATE TABLE stock (sku TEXT PRIMARY KEY, qty INTEGER);
INSERT INTO stock VALUES ('PEN', 10);
INSERT INTO stock (sku, qty) VALUES ('PEN', 5) ON CONFLICT (sku) DO UPDATE SET qty = qty + excluded.qty;
INSERT INTO stock (sku, qty) VALUES ('PEN', 99) ON CONFLICT (sku) DO NOTHING;
INSERT INTO stock (sku, qty) VALUES ('LAMP', 3) ON CONFLICT (sku) DO NOTHING;
SELECT * FROM stock ORDER BY sku;
-- Output:
-- sku | qty
-- LAMP | 3
-- PEN | 15
Login to try C/C++/Java/PHP code in the editor
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the
view already swaps in the hi_ translation fields (or blanks these
out if untranslated), so this renders correctly for both languages
without a lang_code check here. #}
आम गलतियां
- बिना एक unique constraint के conflict target
- conflict column list भूल जाना
- नई values reuse करने के लिए EXCLUDED इस्तेमाल न करना
चैप्टर सारांश
- ON CONFLICT duplicate keys handle करता है
- DO NOTHING या DO UPDATE
- EXCLUDED नई values hold करता है
- एक unique constraint या index चाहिए
🔒
Chapter Quiz — Complete all 7 topics to unlock
0/7 topics done
Complete these topics first: