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