Я сделал неправильный запрос на обновление в своей таблице.
Я забыл сделать поле id в предложении WHERE
.
Так что обновил все мои строки.
Как это восстановить?
У меня не было резервной копии....
Я сделал неправильный запрос на обновление в своей таблице.
Я забыл сделать поле id в предложении WHERE
.
Так что обновил все мои строки.
Как это восстановить?
У меня не было резервной копии....
Извините, но шансы восстановить перезаписанную базу данных MySQL обычно близки к нулю. В отличие от удаления файла, перезапись записи фактически и физически перезаписывает существующие данные в большинстве случаев.
Чтобы быть готовым, если что-то случится здесь, вы должны остановить свой сервер MySQL и сделать копию физического каталога, содержащего базу данных, чтобы ничего не могло быть перезаписано в дальнейшем: достаточно простого копирования + вставки папки данных в другое место.
Но не надейтесь - я думаю, что на самом деле ничего нельзя сделать.
Возможно, вы захотите настроить частое резервное копирование базы данных на будущее. Вокруг много решений; одним из самых простых, надежных и легко автоматизируемых (с использованием at
или cron
в Linux или планировщика задач в Windows) является собственный mysqldump.
Здесь следует усвоить два урока:
ROLLBACK
, если что-то пойдет не так, как планировалось.Знание обработки транзакций (автоматическая, явная и неявная) для вашей базы данных может избавить вас от необходимости восстанавливать данные из резервной копии.
Транзакции контролируют оператор(ы) манипулирования данными, чтобы гарантировать их атомарность. Быть «атомарным» означает, что транзакция либо происходит, либо нет. Единственный способ подать сигнал о завершении транзакции в базу данных — это использовать оператор COMMIT
или ROLLBACK
(согласно ANSI-92, который, к сожалению, не включает синтаксис для создания/начала транзакции, поэтому он зависит от поставщика). COMMIT
применяет изменения (если есть), сделанные в рамках транзакции. ROLLBACK
игнорирует любые действия, имевшие место в рамках транзакции, что очень желательно, когда инструкция UPDATE/DELETE делает что-то непреднамеренное.
Обычно отдельные операторы DML (вставка, обновление, удаление) выполняются в транзакции автоматической фиксации — они фиксируются, как только оператор успешно завершается. Это означает, что в таких случаях, как ваш, нет возможности откатить базу данных до состояния, предшествующего выполнению инструкции. Когда что-то пойдет не так, единственный доступный вариант восстановления — восстановить данные из резервной копии (при условии, что она существует). В MySQL автоматическая фиксация включена< /em> по умолчанию для InnoDB — MyISAM не поддерживает транзакции. Его можно отключить с помощью:
SET autocommit = 0
Явная транзакция — это когда операторы заключены в явно определенный блок кода транзакции — для MySQL это START TRANSACTION
. Это также требует явного указания оператора COMMIT
или ROLLBACK
в конце транзакции. Вложенные транзакции выходят за рамки этой темы.
Неявные транзакции немного отличаются от явных. Неявные транзакции не требуют явного определения транзакции. Однако, как и явные транзакции, для них требуется оператор COMMIT
или ROLLBACK
.
Явные транзакции являются наиболее идеальным решением: для завершения транзакции требуется оператор COMMIT
или ROLLBACK
, и то, что происходит, четко указано, чтобы другие могли прочитать, если возникнет необходимость. Неявные транзакции допустимы при интерактивной работе с базой данных, но операторы COMMIT
следует указывать только после того, как результаты будут проверены и полностью признаны действительными.
Это означает, что вы должны использовать:
SET autocommit = 0;
START TRANSACTION;
UPDATE ...;
...и используйте COMMIT;
только тогда, когда результаты верны.
При этом операторы UPDATE и DELETE обычно возвращают только количество затронутых строк, а не конкретные детали. Преобразуйте такие операторы в операторы SELECT и проверьте результаты, чтобы убедиться в их правильности перед попыткой выполнить оператор UPDATE/DELETE.
Операторы DDL (язык определения данных) фиксируются автоматически — они не требуют оператора COMMIT. IE: таблица, индекс, хранимая процедура, база данных и операторы создания или изменения представления.
Извините, но нет возможности восстановить старые значения полей без резервной копии.
Не стреляйте в вестника...
У вас включены бинлоги? Вы можете восстановить, обратившись к binlogs.