SQLite Forum

UPSERT On Conflict with no target
Login
If you're going to do an update, then you need a specific constraint.

If you're going to do nothing, then you can either specify a constraint, or leave it blank to mean any constraint.

It's because one insert row could violate multiple different unique constraints, with it being a _different row_ for each of the constraints that's causing the violation, and the upsert is only intended to update a single row.

But if you're not going to update a row and just "do nothing" then it's ok to say "for any constraint", because the action would be the same for all of them without any ambiguity.