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