From [UPSERT doc](https://www.sqlite.org/lang_UPSERT.html) > [...] The conflict target specifies a specific uniqueness constraint that will trigger the upsert. > The conflict target is required for DO UPDATE upserts, but is optional for DO NOTHING. > When the conflict target is omitted, the upsert behavior is triggered by a violation of **any** > uniqueness constraint on the table of the INSERT. [...] My table has a single (3-column) UNIQUE constraint, and no other constraints. An `insert ... on conflict do update set ...` fails with a syntax error. While `insert ... on conflict(col1, col2, col3) do update set ...` is OK. I'm obviously misreading the _When the conflict target is omitted_ sentence. What am I missing? That somehow applies to _DO NOTHING_ only? The previous sentence does say _required for DO UPDATE_, but the next one read independently to me. In any case, I find this confusing as written, FWIW. Thanks, --DD