SQL

UPSERT — MySQL ON DUPLICATE KEY UPDATE

admin by @admin ADMIN
6d ago
May 31, 2026
Public
0 0 up · 0 down Sign in to vote
MySQL's flavor of upsert. Triggers when an INSERT would violate a PRIMARY KEY or UNIQUE constraint. Use `VALUES()` (or `NEW.col` in MySQL 8.0.20+) to reference the would-be-inserted row.
SQL
Raw
-- Insert or update — classic syntax
INSERT INTO page_views (url, views, last_seen)
VALUES ('/about', 1, NOW())
ON DUPLICATE KEY UPDATE
    views     = views + 1,
    last_seen = VALUES(last_seen);

-- MySQL 8.0.20+ — VALUES() is deprecated; use row aliases
INSERT INTO page_views (url, views, last_seen)
VALUES ('/about', 1, NOW()) AS new
ON DUPLICATE KEY UPDATE
    views     = views + 1,
    last_seen = new.last_seen;

-- Idempotent insert-only (the MySQL equivalent of DO NOTHING)
INSERT IGNORE INTO events (event_id, payload)
VALUES ('evt_123', '{}');

-- Bulk upsert in one statement
INSERT INTO inventory (sku, qty) VALUES
    ('A1', 10), ('B2', 20), ('C3', 30)
ON DUPLICATE KEY UPDATE qty = qty + VALUES(qty);
Tags

Save your own code snippets

Create a free account and build your private vault. Share publicly whenever you want.