Откат не работает в MySQL

У меня есть пользовательская таблица, и у меня есть 5 записей.

Я удалил две записи, а затем выполнил команду отката, она выполнена успешно.

Но удаленные две записи не восстановлены.

Механизм пользовательской таблицы InnoDB.

Ответ 1

Вы должны иметь возможность откатить транзакцию, поскольку движок таблицы - InnoDB. enter image description here

В любом случае, это правильный способ совершения транзакций,

SET autocommit=0;
START TRANSACTION; 
Your Query here.
ROLLBACK;

и убедитесь, что вы не используете COMMIT после запроса, который вам нужно откат. обращаться Настольные двигатели и Транзакция. И когда создается соединение с БД, он по умолчанию работает в режиме автоматической фиксации. Это означает, что каждый отдельный оператор SQL рассматривается как транзакция и автоматически фиксируется сразу после его выполнения. Поэтому, если вам нужно делать транзакции самостоятельно, вы должны отключить режим автообновления на AUTOCOMMIT = 0. Для получения дополнительной информации см. Ссылку .

Ответ 2

By default, MySQL starts the session
for each new connection with
autocommit enabled,

Вы можете отключить режим автосохранения перед запуском своего запроса

SET autocommit=0;

ref:

Ссылка 1

Ссылка 2

Ответ 4

Убедитесь, что вы уже выполнили команду

start transaction;  

перед удалением запроса.

Ответ 5

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

В рамках моей транзакции я назвал "LOCK TABLES...", который

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

(http://dev.mysql.com/doc/refman/5.0/en/lock-tables-and-transactions.html)

Я закончил блокировку вне (до) транзакции, так как это было первое, что я делал в транзакции в любом случае. В качестве альтернативы вы можете сделать, как предлагают документы:

SET autocommit=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
... do something with tables t1 and t2 here ...
COMMIT;
UNLOCK TABLES;

Ответ 6

У меня такая же проблема, но я проверил поддержку innodb

Во-первых: Проверьте, доступен ли Engine INNODB: с помощью этого:

mysql> show engines;

если INNODB отключен: затем

Во-вторых: перейдите в файл "my.ini", в моем случае в C:\AppServ\mysql в этом файле удаляет "#" строки

#default-storage-engine=INNODB -> default-storage-engine=INNODB

а строка skip-innodb добавляет "#"

skip-innodb -> #skip-innodb

В-третьих: сохранить и перезапустить службу mysql, и проблема была решена.

Ответ 7

Я думаю, есть одна важная вещь: повторная активация autocommit после завершения транзакции.

SET autocommit = 0;
START TRANSACTION;
    INSERT INTO ..
    UPDATE <table> ..
COMMIT;
SET autocommit = 1;

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

Ответ 8

Некоторые проблемы :'(

START TRANSACTION;
SET AUTOCOMMIT=0;
INSERT TEST VALUES ('TEST 1');
ROLLBACK;

Затрагиваемые строки: 1

Не работает откат