[英]How can I undo a mysql statement that I just executed?
如何撤消最近執行的mysql查詢?
如果將表類型定義為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查詢。
您可以停止正在處理的查詢
通過=> show processlist查找查詢過程的ID;
然后=>殺死id;
如果您不僅需要撤消上一個查詢(盡管您的問題實際上只指向了我,我知道),因此如果某個事務可能無法幫助您,您需要為此實現一個解決方法:
在提交查詢之前復制原始數據,並根據兩個表中必須相同的唯一ID按需寫回; 您的回滾表(包含未更改數據的副本)和您的實際表(包含應該“撤消”的數據)。 對於具有許多表的數據庫,包含原始數據的結構化轉儲/副本的單個“回滾表”將更好地使用,然后對每個實際表使用一個。 它將包含實際表的名稱,行的唯一ID,並在第三個字段中包含任何所需格式的內容,它們清楚地表示數據結構和值(例如XML)。 基於前兩個字段,第三個字段將被解析並寫回實際表。 帶有時間戳的第四個字段有助於清理此回滾表。
因為盡管在事務中“回滾”,但是在SQL語言中沒有真正的撤銷(請糾正我,如果我錯了 - 也許現在有一個),這是唯一的方法,我想,你必須編寫代碼為你自己。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.