Как я могу отменить последний выполненный запрос mysql?
Как я могу отменить оператор mysql, который я только что выполнил?
Ответы (6)
Если вы определяете тип таблицы как InnoDB, вы можете использовать транзакции. Вам понадобится установить AUTOCOMMIT=0
, и после этого вы можете ввести COMMIT
или ROLLBACK
в конце запроса или сеанса, чтобы отправить или отменить транзакцию.
ROLLBACK -- will undo the changes that you have made
Вы можете сделать это только во время транзакции.
BEGIN;
INSERT INTO xxx ...;
DELETE FROM ...;
Тогда вы можете либо:
COMMIT; -- will confirm your changes
Or
ROLLBACK -- will undo your previous changes
В основном: если вы выполняете транзакцию, просто выполните откат. В противном случае вы не сможете «отменить» запрос MySQL.
Вы можете остановить запрос, который обрабатывается этим
Найдите идентификатор процесса запроса с помощью => show processlist;
Затем => убить идентификатор;
в случае, если вам нужно не только отменить свой последний запрос (хотя ваш вопрос на самом деле указывает только на это, я знаю), и поэтому, если транзакция может вам не помочь, вам нужно реализовать обходной путь для этого:
скопируйте исходные данные перед фиксацией запроса и запишите их обратно по запросу на основе уникального идентификатора, который должен быть одинаковым в обеих таблицах; ваша таблица отката (с копиями неизмененных данных) и ваша фактическая таблица (содержащая данные, которые должны быть «отменены», чем). для баз данных, имеющих много таблиц, лучше использовать одну единственную «таблицу отката», содержащую структурированные дампы/копии исходных данных, а не одну для каждой фактической таблицы. он будет содержать имя фактической таблицы, уникальный идентификатор строки и в третьем поле содержимое в любом желаемом формате, который четко представляет структуру данных и значения (например, XML). на основе первых двух полей это третье будет проанализировано и записано обратно в реальную таблицу. четвертое поле с отметкой времени помогло бы очистить эту таблицу отката.
так как в SQL-диалектах нет реальной отмены, несмотря на "откат" в транзакции (пожалуйста, поправьте меня, если я ошибаюсь - может быть, сейчас он есть), это единственный способ, я думаю, и вы должны написать код за это самостоятельно.