如何撤消mysql查询?

我怎样才能撤消最近执行的MySQL查询?

如果将表types定义为InnoDB,则可以使用事务(请参阅下面的链接)。 您需要设置AUTOCOMMIT = 0,然后在查询或会话结束时发出COMMIT或ROLLBACK以提交或取消事务。

ROLLBACK -- will undo the changes that you have made 

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

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

那么你可以:

 COMMIT; -- will confirm your changes 

要么

 ROLLBACK -- will undo your previous changes 

基本上:如果你正在做一个事务只是做一个回滚。 否则,你不能“撤销”一个MySQL查询。

对于一些指令,比如ALTER TABLE,这对于MySQL来说是不可能的,即使对于事务( 1和2 )也是如此。

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

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

然后=>杀死ID;

如果你不仅需要撤销你的最后一个查询(虽然你的问题实际上只是指出了这一点,我知道),因此如果一个事务可能无法帮助你,你需要实现一个解决方法:

在提交查询之前复制原始数据,并根据需要重新写入,这两个表中的唯一ID必须相同; 你的回滚表(带有未改变的数据的副本)和你的实际表(包含应该被“取消”的数据)。 对于具有多个表的数据库,包含原始数据的结构化转储/副本的单个“回滚表”对于每个实际表格将更好地使用一个。 它将包含实际表的名称,行的唯一ID,以及在第三个字段中的任何期望格式的内容,其清楚地表示数据结构和值(例如XML)。 基于前两个字段,第三个字段将被parsing并写回到实际的表中。 具有时间戳的第四个字段将帮助清理这个回滚表。

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