如何撤消刚刚执行的mysql语句?

问题描述 投票:45回答:6

如何撤消最近执行的mysql查询?

mysql rollback
6个回答
33
投票

如果将表类型定义为InnoDB,则可以使用事务。您需要设置AUTOCOMMIT=0,然后在查询或会话结束时发出COMMITROLLBACK以提交或取消交易。

ROLLBACK -- will undo the changes that you have made

30
投票

您只能在交易期间执行此操作。

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

然后你可以:

COMMIT; -- will confirm your changes

要么

ROLLBACK -- will undo your previous changes

20
投票

基本上:如果您正在进行交易,只需进行回滚即可。否则,您无法“撤消”MySQL查询。


5
投票

对于某些指令,如ALTER TABLE,即使使用事务(12),MySQL也无法做到这一点。


4
投票

您可以停止正在处理的查询

通过=> show processlist查找查询过程的ID;

然后=>杀死id;


1
投票

如果您不仅需要撤消上一个查询(尽管您的问题实际上只指向了我,我知道),因此如果某个事务可能无法帮助您,您需要为此实现一个解决方法:

在提交查询之前复制原始数据,并根据两个表中必须相同的唯一ID按需写回;您的回滚表(包含未更改数据的副本)和您的实际表(包含应该“撤消”的数据)。对于具有许多表的数据库,包含原始数据的结构化转储/副本的单个“回滚表”将更好地使用,然后对每个实际表使用一个。它将包含实际表的名称,行的唯一ID,并在第三个字段中包含任何所需格式的内容,它们清楚地表示数据结构和值(例如XML)。基于前两个字段,第三个字段将被解析并写回实际表。带有时间戳的第四个字段有助于清理此回滚表。

因为尽管在事务中“回滚”,但是在SQL语言中没有真正的撤销(请纠正我,如果我错了 - 也许现在有一个),这是唯一的方法,我想,你必须编写代码为你自己。

© www.soinside.com 2019 - 2024. All rights reserved.