Подтвердить что ты не робот

Как отменить mysql-запрос?

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

4b9b3361

Ответ 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-диалектах нет реального отмены, несмотря на "откат" в транзакции (пожалуйста, поправьте меня, если я ошибаюсь - может быть, теперь есть одно), это единственный способ, я думаю, и вы должны напишите код для этого самостоятельно.