Why Did This Single SQL Update the Entire Table Without Error in MySQL?
A developer wrote an UPDATE statement that unintentionally used AND inside the SET clause and omitted a WHERE clause, causing MySQL to silently update every row in the table without raising any syntax errors.
A developer attempted to change the status of certain tasks in the wl_quotes_scheduler.xxl_job_info table and wrote the following SQL:
UPDATE wl_quotes_scheduler.xxl_job_info
SET trigger_status = -2 AND job_group NOT IN (61,58);The intention was to apply the change only to rows matching the job_group condition, but the AND operator was placed inside the SET clause instead of a WHERE clause.
MySQL parses the SET clause as an expression. It treats the Boolean expression -2 AND (job_group NOT IN (61,58)) as a calculation, where Boolean values are converted to 1 (TRUE) or 0 (FALSE). Consequently, the statement is interpreted as assigning the result of that expression to trigger_status for every row.
Because there is no WHERE clause, the assignment is applied to the entire table, effectively updating trigger_status for all rows—either to 0 or 1 depending on the Boolean evaluation.
Key Takeaways
MySQL permits arbitrary expressions, including Boolean expressions, in the SET clause.
The AND keyword inside SET is an operator, not a condition filter.
Omitting a WHERE clause results in a full‑table update.
Boolean TRUE/FALSE values are cast to 1/0 in numeric contexts.
To avoid such silent pitfalls, always place filtering logic in a proper WHERE clause and verify the syntax of the SET expression before execution.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
