Отменить команду UPDATE mysql

Я пытался сделать обновление на сервере MySQL и случайно забыл добавить дополнительное предложение WHERE, которое должно было отредактировать одну строку.

Теперь у меня есть 3500+ строк, отредактированных из-за моей ошибки.

Возможно, у меня есть резервная копия, но с момента последней резервной копии я много работал, и я просто не хочу тратить все это из-за одного плохого запроса.

Скажите, пожалуйста, что я могу это сделать, чтобы исправить это.

Ответ 1

Если вы совершили транзакцию, пришло время пытать эту резервную копию, извините. Но для чего нужны резервные копии. Я сделал что-то подобное после себя... однажды.

Ответ 2

Просто идея - можете ли вы восстановить резервную копию в NEW-базу данных, а затем выполнить кросс-запрос базы данных для обновления этого столбца на основе данных, которые они использовали?

Ответ 3

Ничего.

Несмотря на это, вы можете быть рады, что у вас есть этот опыт обучения под вашим поясом и гордитесь тем, как вы теперь измените свои привычки, чтобы значительно уменьшить вероятность его повторения. Теперь вы станете "хозяином", который может научить молодых щенков и процитировать их из фактического опыта, испытанного в битве.

Ответ 4

Есть только одна вещь, которую вы можете исправить сейчас - это ваша привычка, она поможет вам в будущем. Я знаю, это старый вопрос, и ОП, должно быть, усвоил урок. Я просто публикую это для других, потому что я также выучил урок сегодня.

Таким образом, я должен был выполнить запрос, который должен был обновить около пятидесяти записей, а затем MySQL вернул 48500 row(s) affected THIS) 48500 row(s) affected меня небольшой сердечный приступ из-за одной глупой ошибки в состоянии WHERE: D

Итак, вот уроки:

  1. Всегда проверяйте свой query дважды перед его выполнением, но иногда это не поможет, потому что вы все равно можете совершить эту глупую ошибку.
  2. Поскольку шаг 1 не всегда полезен, лучше всегда делать резервные копии своей DB перед выполнением любого запроса, который повлияет на данные.
  3. Если вам лень создавать резервную копию (как я делал, когда выполнял этот глупый запрос), потому что БД большая и на это потребуется время, то, по крайней мере, используйте 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