Как я могу отменить оператор mysql, который я только что выполнил? - PullRequest
47 голосов
/ 27 мая 2010

Как я могу отменить самый последний выполненный запрос mysql?

Ответы [ 6 ]

33 голосов
/ 27 мая 2010

Если вы определяете тип таблицы как InnoDB, вы можете использовать транзакции. Вам нужно будет установить AUTOCOMMIT=0, и после того, как вы сможете выполнить COMMIT или ROLLBACK в конце запроса или сеанса, чтобы отправить или отменить транзакцию.

ROLLBACK -- will undo the changes that you have made
30 голосов
/ 27 мая 2010

Вы можете сделать это только во время транзакции.

BEGIN;
INSERT INTO xxx ...;
DELETE FROM ...;

Тогда вы можете либо:

COMMIT; -- will confirm your changes

Или

ROLLBACK -- will undo your previous changes
20 голосов
/ 27 мая 2010

В основном: если вы делаете транзакцию, просто сделайте откат. В противном случае вы не сможете "отменить" запрос MySQL.

5 голосов
/ 24 августа 2011

Для некоторых инструкций, таких как ALTER TABLE, это невозможно с MySQL, даже с транзакциями ( 1 и 2 ).

4 голосов
/ 27 мая 2010

Вы можете остановить запрос, который обрабатывается этим

Найдите идентификатор процесса запроса с помощью => show processlist;

Тогда => убить ID;

1 голос
/ 23 октября 2017

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

скопируйте исходные данные перед отправкой запроса и запишите их по требованию на основе уникального идентификатора, который должен быть одинаковым в обеих таблицах; ваша таблица отката (с копиями неизмененных данных) и ваша фактическая таблица (содержащая данные, которые должны быть «отменены», чем). для баз данных, имеющих много таблиц, лучше использовать одну «таблицу отката», содержащую структурированные дампы / копии исходных данных, чем одну для каждой фактической таблицы. он будет содержать имя фактической таблицы, уникальный идентификатор строки и в третьем поле контент в любом желаемом формате, который четко представляет структуру данных и значения (например, XML). на основе первых двух полей это третье будет проанализировано и записано обратно в фактическую таблицу. четвертое поле с отметкой времени поможет очистить таблицу отката.

поскольку в SQL-диалектах нет реальной отмены, несмотря на "откат" в транзакции (исправьте меня, если я ошибаюсь - может быть, теперь есть один), я думаю, это единственный способ, и вы должны написать код для этого самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...