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

如何撤消刚刚执行的mysql语句?,mysql,rollback,Mysql,Rollback,如何撤消最近执行的mysql查询?基本上:如果正在执行事务,只需执行回滚即可。否则,您无法“撤消”MySQL查询。您只能在事务期间执行此操作 BEGIN; INSERT INTO xxx ...; DELETE FROM ...; 然后你可以: COMMIT; -- will confirm your changes 或 如果将表类型定义为InnoDB,则可以使用事务。您需要设置AUTOCOMMIT=0,然后可以在查询或会话结束时发出COMMIT或ROLLBACK,以提交或取消事务 ROLL

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

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

您只能在事务期间执行此操作

BEGIN;
INSERT INTO xxx ...;
DELETE FROM ...;
然后你可以:

COMMIT; -- will confirm your changes


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

ROLLBACK -- will undo the changes that you have made

您可以停止此服务器正在处理的查询

通过=>ShowProcessList查找查询进程的Id


然后=>kill id

对于某些说明,如ALTER TABLE,MySQL不可能做到这一点,即使使用事务(和)。

如果您不仅需要撤消上一次查询(虽然我知道您的问题实际上只指出了这一点),因此如果事务可能无法帮到您,您需要为此实施一种变通方法:

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


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

这听起来像是“哎呀,我刚刚删除了数据库”之类的时刻。也需要帮助。由于代码错误,我刚刚清空了所有表。。。也可能很容易成为一个糟糕的WHERE子句!这种联系或许会有所帮助
ROLLBACK -- will undo the changes that you have made