Как с запросом SELECT определить изменилось что-либо или нет

Ответ

В SQL нет прямого способа проверить, изменились ли данные после UPDATE или DELETE, но есть обходные пути:

  1. Для UPDATE можно использовать RETURNING (PostgreSQL) или OUTPUT (SQL Server):
UPDATE users SET name = 'New Name' 
WHERE id = 1 
RETURNING *;
  1. В MySQL можно проверить количество затронутых строк через ROW_COUNT():
UPDATE users SET name = 'New Name' WHERE id = 1;
SELECT ROW_COUNT() AS affected_rows;
  1. Альтернативно - выполнить SELECT до и после операции и сравнить результаты в коде приложения.

  2. Для INSERT можно использовать LAST_INSERT_ID() (MySQL) или RETURNING id (PostgreSQL).

В большинстве СУБД операции UPDATE/DELETE возвращают количество измененных строк, что можно использовать как индикатор изменений.

Ответ 18+ 🔞

Да ты посмотри, какая дичь! В SQL, блядь, нет нормального способа проверить, а поменялось ли там что-то после UPDATE или DELETE. Ну прям пиздец, как неудобно! Но русский человек, он же не пропадёт, нашёл же обходные пути, как жопу через забор чесать.

Смотри сюда, ёпта:

  1. Если ты на PostgreSQL или SQL Server сидишь, то можно выцепить, что там обновилось, прямо как клеща. RETURNING или OUTPUT — твои лучшие друзья, блядь.
UPDATE users SET name = 'Новое Имя'
WHERE id = 1
RETURNING *; -- Смотри-ка, сука, что я тебе верну!
  1. А в MySQL, этому упоротому гномику, нужно по-другому. Там есть такая функция ROW_COUNT(), которая, блядь, скажет, скольких ты зацепил.
UPDATE users SET name = 'Новое Имя' WHERE id = 1;
SELECT ROW_COUNT() AS affected_rows; -- Ну что, падла, зацепил кого или нет?
  1. Ну а если ты совсем параноик, или СУБД твоя — говно редкое, то делай по-дедовски: сделай SELECT до операции, потом после, и сравни, блядь, в своём коде. Муторно, зато надёжно, как танк.

  2. Для INSERT, кстати, тоже свои фокусы есть. В MySQL — LAST_INSERT_ID(), в PostgreSQL — опять RETURNING id. Чтобы сразу знать, какой свежеиспечённый id, блядь, в базу воткнулся.

Вообще-то, почти все СУБД, эти стервы, возвращают количество строк, которые ты там поцарапал. Вот эту циферку и лови, как индикатор, что ты не просто так воздух сотрясал, а реально что-то сделал. Ну или не сделал, лол.