簡體   English   中英

如何撤消剛剛執行的mysql語句?

[英]How can I undo a mysql statement that I just executed?

如何撤消最近執行的mysql查詢?

如果將表類型定義為InnoDB,則可以使用事務。 您需要設置AUTOCOMMIT=0 ,然后在查詢或會話結束時發出COMMITROLLBACK以提交或取消事務。

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,即使使用事務( 12 ),MySQL也無法做到這一點。

您可以停止正在處理的查詢

通過=> show processlist查找查詢過程的ID;

然后=>殺死id;

如果您不僅需要撤消上一個查詢(盡管您的問題實際上只指向了我,我知道),因此如果某個事務可能無法幫助您,您需要為此實現一個解決方法:

在提交查詢之前復制原始數據,並根據兩個表中必須相同的唯一ID按需寫回; 您的回滾表(包含未更改數據的副本)和您的實際表(包含應該“撤消”的數據)。 對於具有許多表的數據庫,包含原始數據的結構化轉儲/副本的單個“回滾表”將更好地使用,然后對每個實際表使用一個。 它將包含實際表的名稱,行的唯一ID,並在第三個字段中包含任何所需格式的內容,它們清楚地表示數據結構和值(例如XML)。 基於前兩個字段,第三個字段將被解析並寫回實際表。 帶有時間戳的第四個字段有助於清理此回滾表。

因為盡管在事務中“回滾”,但是在SQL語言中沒有真正的撤銷(請糾正我,如果我錯了 - 也許現在有一個),這是唯一的方法,我想,你必須編寫代碼為你自己。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM