У меня есть пользовательская таблица, и у меня есть 5 записей.
Я удалил две записи, а затем выполнил команду отката, она выполнена успешно.
Но удаленные две записи не восстановлены.
Механизм пользовательской таблицы InnoDB.
У меня есть пользовательская таблица, и у меня есть 5 записей.
Я удалил две записи, а затем выполнил команду отката, она выполнена успешно.
Но удаленные две записи не восстановлены.
Механизм пользовательской таблицы InnoDB.
Вы должны иметь возможность откатить транзакцию, поскольку движок таблицы - InnoDB.
В любом случае, это правильный способ совершения транзакций,
SET autocommit=0;
START TRANSACTION;
Your Query here.
ROLLBACK;
и убедитесь, что вы не используете COMMIT
после запроса, который вам нужно откат. обращаться
Настольные двигатели и Транзакция. И когда создается соединение с БД, он по умолчанию работает в режиме автоматической фиксации. Это означает, что каждый отдельный оператор SQL рассматривается как транзакция и автоматически фиксируется сразу после его выполнения. Поэтому, если вам нужно делать транзакции самостоятельно, вы должны отключить режим автообновления на AUTOCOMMIT = 0
. Для получения дополнительной информации см. Ссылку .
By default, MySQL starts the session
for each new connection with
autocommit enabled,
Вы можете отключить режим автосохранения перед запуском своего запроса
SET autocommit=0;
ref:
SET autocommit=0;
BEGIN;
.
.
.
ROLLBACK;
Убедитесь, что вы уже выполнили команду
start transaction;
перед удалением запроса.
Я не знаю, были ли вы запирать столы, но я столкнулся с той же проблемой, когда казалось, что откат не работает.
В рамках моей транзакции я назвал "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;
У меня такая же проблема, но я проверил поддержку 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, и проблема была решена.
Я думаю, есть одна важная вещь: повторная активация autocommit после завершения транзакции.
SET autocommit = 0;
START TRANSACTION;
INSERT INTO ..
UPDATE <table> ..
COMMIT;
SET autocommit = 1;
В противном случае все, что вы делаете после отключения autocommit
даже без транзакции, потребует, чтобы вы явно зафиксировали.
START TRANSACTION;
SET AUTOCOMMIT=0;
INSERT TEST VALUES ('TEST 1');
ROLLBACK;
Затрагиваемые строки: 1
Не работает откат