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

时间:2010-05-27 06:05:18

标签: mysql rollback

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

6 个答案:

答案 0 :(得分:31)

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

ROLLBACK -- will undo the changes that you have made

答案 1 :(得分:29)

您只能在交易过程中这样做。

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

然后你可以:

COMMIT; -- will confirm your changes

或者

ROLLBACK -- will undo your previous changes

答案 2 :(得分:20)

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

答案 3 :(得分:5)

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

答案 4 :(得分:4)

您可以停止此

正在处理的查询

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

然后=>杀死id;

答案 5 :(得分:1)

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

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

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