Ответ 1
Если вы совершили транзакцию, пришло время пытать эту резервную копию, извините. Но для чего нужны резервные копии. Я сделал что-то подобное после себя... однажды.
Я пытался сделать обновление на сервере MySQL и случайно забыл добавить дополнительное предложение WHERE, которое должно было отредактировать одну строку.
Теперь у меня есть 3500+ строк, отредактированных из-за моей ошибки.
Возможно, у меня есть резервная копия, но с момента последней резервной копии я много работал, и я просто не хочу тратить все это из-за одного плохого запроса.
Скажите, пожалуйста, что я могу это сделать, чтобы исправить это.
Если вы совершили транзакцию, пришло время пытать эту резервную копию, извините. Но для чего нужны резервные копии. Я сделал что-то подобное после себя... однажды.
Просто идея - можете ли вы восстановить резервную копию в NEW-базу данных, а затем выполнить кросс-запрос базы данных для обновления этого столбца на основе данных, которые они использовали?
Ничего.
Несмотря на это, вы можете быть рады, что у вас есть этот опыт обучения под вашим поясом и гордитесь тем, как вы теперь измените свои привычки, чтобы значительно уменьшить вероятность его повторения. Теперь вы станете "хозяином", который может научить молодых щенков и процитировать их из фактического опыта, испытанного в битве.
Есть только одна вещь, которую вы можете исправить сейчас - это ваша привычка, она поможет вам в будущем. Я знаю, это старый вопрос, и ОП, должно быть, усвоил урок. Я просто публикую это для других, потому что я также выучил урок сегодня.
Таким образом, я должен был выполнить запрос, который должен был обновить около пятидесяти записей, а затем MySQL
вернул 48500 row(s) affected
THIS) 48500 row(s) affected
меня небольшой сердечный приступ из-за одной глупой ошибки в состоянии WHERE
: D
Итак, вот уроки:
query
дважды перед его выполнением, но иногда это не поможет, потому что вы все равно можете совершить эту глупую ошибку.DB
перед выполнением любого запроса, который повлияет на данные.TRANSACTION
и я думаю, что это хороший легкий способ справиться с катастрофой. Отныне это то, что я делаю с каждым запросом, который влияет на данные: Я запускаю Transaction
, запускаю Query
и проверяю результаты, если они в порядке или нет. Если результаты в порядке, тогда я просто COMMIT
изменения, чтобы преодолеть катастрофу, я просто ROLLBACK
START TRANSACTION;
UPDATE myTable
SET name = 'Sam'
WHERE recordingTime BETWEEN '2018-04-01 00:00:59' AND '2019-04-12 23:59:59';
ROLLBACK;
-- COMMIT; -- I keep it commented so that I dont run it mistakenly and only uncomment when I really want to COMMIT the changes