Как я могу откатить мою последнюю команду удаления в MySQL? - PullRequest
50 голосов
/ 01 марта 2010

Я случайно удалил из таблицы огромное количество строк ...

Как мне откатиться назад?

Я выполнил запрос, используя PuTTY .

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

Ответы [ 10 ]

93 голосов
/ 01 марта 2010

Если вы не сделали резервную копию, вы в значительной степени обмануты.

28 голосов
/ 01 марта 2010

Если вы еще не совершили транзакцию, попробуйте rollback. Если вы уже совершили транзакцию (с помощью commit или путем выхода из клиента командной строки), необходимо восстановить данные из последней резервной копии.

12 голосов
/ 01 марта 2010

«Откат» работает только при использовании транзакций . Таким образом, вы можете группировать запросы и отменять все запросы, если только один из них завершится неудачей.

Но если вы уже совершили транзакцию (или использовали обычный запрос DELETE), единственный способ вернуть ваши данные - это восстановить их из ранее сделанной резервной копии.

5 голосов
/ 20 августа 2016

Используйте команду BEGIN TRANSACTION перед запуском запросов. Так что вы можете ROLLBACK вещи в любой момент времени.

НА ПРИМЕРЕ:

  1. начать транзакцию
  2. выберите * из ученика
  3. удалить из Студента, где Id = 2
  4. выбрать * из ученика
  5. Откат
  6. выбрать * из ученика
3 голосов
/ 16 февраля 2015

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

7.5 Восстановление в определенный момент времени (инкрементное) Использование двоичного журнала является хорошей отправной точкой для изучения этой возможности.

2 голосов
/ 18 марта 2018

В MySQL:

start transaction;

savepoint sp1;

delete from customer where ID=1;

savepoint sp2;

delete from customer where ID=2;

rollback to sp2;

rollback to sp1;
0 голосов
/ 01 марта 2018

В Oracle это не проблема:

SQL> delete from Employee where id = '01';

1 row deleted.

SQL> select id, last_name from Employee where id = '01';

no rows selected

SQL> rollback;

Rollback complete.

SQL> select * from Employee  where id = '01';

ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
---- ---------- ---------- --------- --------- ---------- ---------- ---------------
01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
0 голосов
/ 18 октября 2017

Я также удалил некоторые значения из своей базы данных разработки, но у меня была та же копия в базе данных QA, поэтому я создал сценарий создания и выбрал опцию «тип данных для сценария» для «только данные» и выбрал свою таблицу.

Затем я получил операторы вставки с теми же данными, а затем запустил сценарий в своей базе данных разработки.

0 голосов
/ 04 августа 2016

Если вам нужны данные отката, сначала вам нужно выполнить autocommit = 0, а затем выполнить запрос удаления, вставки или обновления.

После выполнения запроса выполните откат ...

0 голосов
/ 21 августа 2013

Откат обычно не работает с этими функциями удаления, и, конечно, только резервная копия может спасти вас.

Если резервной копии нет, восстановить ее невозможно, так как запросы на удаление выполнялись в PuTTY. Derby с использованием файлов .sql автоматически фиксируется после запуска запроса на удаление.

...