如何撤消最近执行的mysql查询?
答案 0 :(得分:31)
如果将表类型定义为InnoDB,则可以使用事务。您需要设置AUTOCOMMIT=0
,然后在查询或会话结束时发出COMMIT
或ROLLBACK
以提交或取消交易。
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)
答案 4 :(得分:4)
您可以停止此
正在处理的查询通过=>查找查询过程的ID show processlist;
然后=>杀死id;
答案 5 :(得分:1)
如果您不仅需要撤消上一个查询(尽管您的问题实际上仅指出了这一点,我知道),因此如果某个事务可能无法帮助您,您需要为此实现一种解决方法:
在提交查询之前复制原始数据,并根据两个表中必须相同的唯一ID按需写回;您的回滚表(包含未更改数据的副本)和您的实际表(包含应该“撤消”的数据)。 对于具有许多表的数据库,包含原始数据的结构化转储/副本的单个“回滚表”将更好地使用,然后对每个实际表使用一个。它将包含实际表的名称,行的唯一ID,并在第三个字段中包含任何所需格式的内容,它们清楚地表示数据结构和值(例如XML)。基于前两个字段,第三个字段将被解析并写回实际表。带有时间戳的第四个字段有助于清理此回滚表。
因为尽管在事务中“回滚”,但是在SQL语言中没有真正的撤销(请纠正我,如果我错了 - 也许现在有一个),这是唯一的方法,我想,你必须自己编写代码。