опасные функции, потому что идёт потеря данных. Собсно как делать к примеру максимально безопасный update?
К примеру я делаю такой запрос:
update customers set money = 0
where [my condition]
Логично, что прежде чем что-то апдейтить, я должен удостовериться, что мой кондишн выдаёт мне те результаты, которые мне нужны. То есть заранее важно бы сделать select ... from customers where [my condition].
Ок, хорошо, кондишн верный, начал писать свой апдейт, и тут меня отвлекли, я вернулся, забыл и прописал update customers set money = 0, а кондишн забыл добавить, бац. Бизнесу полный ****.
Собственно вопрос такой - какие паттерны есть для безопасного апдейта/делета таблицы?
Бэкапы делать.
Это по умолчанию долго быть :)
Begin tran Update Rollback Tran
Ну кстати многие используют для delete подход когда у строки есть условный статус 0, что значит не удалена и статус 1 что значит удалена и соответственно во всех вью всегда стоит проверка на 0, и все процедуры удаления по факту изменяют статус, даже если пользователь из интерфейса "удалил" запись, а потом прибежал со словами караул как всё вернуть, ты просто в базе изменишь статус нужной записи.
Ну гопа как обычно
Нормальное решение кстати. Ну или включать опцию set implicit_transactions on. Тогда begin tran автомаГически при любом апдейте будет срабатывать.
Обсуждают сегодня