I accidentally removed the WHERE clause from my SQL query in a personal tool. Every row is now the same. I overwrote 206,000+ rows. I have no backup, I am stupid.
"UPDATE table_name SET w = $1, x = $2, z = $4 WHERE y = $3 RETURNING *",
does not do the same as
"UPDATE table_name SET w = $1, x = $2, y = $3, z = $4 RETURNING *",
It's 2 am and my mind blanked out the WHERE, and just wanted the numbers neatly in order of 1234.
This is about the one thing where SQL is a badly designed language, and you should use a frontend that forces you to write your queries in the order (table, filter, columns) for consistency.
UPDATE table_name WHERE y = $3 SET w = $1, x = $2, z = $4 RETURNING *
FROM table_name SELECT w, x, y, z
I get mildly mad all the time when writing SQL because I feel like it's upside down
Instead of
select u.id. u.email, p.name
from user u
join persona p on p.user_id = u.id
where u.active = true
where the columns are referenced before they're defined (like what is u.id? Keep reading to find out!)
it should instead be
from user u
join persona p on u.id = p.user_id
where u.active = true
select u.id, u.email, p.name
Now nothing is defined before it's used, and you're less likely to miss your where clause. I usually write the joins first anyway because I know what tables I care about, but don't know which specific things I'll want.
I can't think of any other languages that use things before they're defined except extremely dysfunctional JavaScript.