2011-01-29 44 views
8

如何撤消phpmyadmin中的查詢執行。如何撤消phpmyadmin中的查詢執行

任何回滾功能在那裏?任何機構都知道解決方案善意幫助我?

+3

你的意思是,停止一個已啓動的查詢,或撤消已完成(和已提交)語句所做的更改? – GolezTrol

+0

是取消已完成的更改 – learner

回答

24

如果聲明仍在運行,您可以使用KILL QUERY <thread_id>

如果聲明已完成但您尚未提交交易,您可以使用ROLLBACK

如果語句已完成且事務已提交(或者您未啓動事務),請從最近的備份中恢復數據。


另外這裏是爲了防止這種情況在第一時間發生的一些提示建議:

  • 當寫一個刪除或更新總是先寫在WHERE子句,這樣你不不要忘記它。
  • 在SELECT語句中測試您的WHERE子句以確保您正在更新正確的行。
  • 如果您知道應該只更新一行,那麼您可以將LIMIT 1添加到UPDATE語句中。然後,如果儘管使用上述技術,仍然有錯誤,至少只有一行會受到影響,而不是整個數據庫。
+0

但是,這隻會停止進一步執行,不會撤消查詢,不是嗎?但殺害+1 +1 – NikiC

+0

您好我已經執行了查詢。其完整的數據更新了一個字段。我可以以任何方式檢索舊數據嗎? – learner

+2

我希望你有一個備份... –

2

你可以去到「流程」頁面,然後按「殺」

1

,如果你刪除的東西的話,我不認爲它會回來,除非你有一個backup.I知道SQL有時可以在您提交一系列SQL命令之前,您將遠離ROLLBACK調用,但只有在事務中,您必須首先啓動它們(phpMyAdmin不使用)。

0

如果您已經提交了交易,恐怕沒有辦法「撤銷」它。這是ACID的核心原則之一。如果你還沒有犯下:只要做一個rollback,你沒事。

您需要從備份恢復數據 - 或者如果查詢正在運行,請使用試試Mark Byers建議的內容。

1

如果您需要在提交更新之前恢復先前數據的能力,那麼您可以使用更新和刪除觸發器來重構數據庫,以將舊數據存儲在帶有當前日期/時間戳的存檔表中,或者(最好是)一個事務ID值(並確保插入始終存儲當前日期/時間戳或事務ID值)......有效地維護對數據庫所做的每個更改的整個歷史記錄。請注意,您的數據庫將以令人難以置信的速度增長......對於關鍵任務數據而言,這只是一個真正的解決方案,因爲需要花費大量精力才能實施,並且需要大量昂貴的磁盤空間來維護。即使如此,如果後續更新受影響的數據,情況會變得非常複雜;而當您恢復到之前的歷史記錄時,您可能需要「丟失」那些。

我只能想到實施這種類型歷史維護的極少數系統......例如Oracle Financials或HR。

或者,有一些數據庫(我曾與舊的DEC RDBMS一起工作)可以維護RUJ(運行單元日誌),然後可以使用這些數據庫從備份中恢復和設置時間/事務。但是MySQL不屬於這個範疇。同樣,它需要大量的磁盤空間,並且只有在定期備份數據時纔是切實可行的,並且恢復過程更爲複雜。 MySQL(據我所知)不支持這個功能。

對於大多數人來說,更實用的方法是從備份進行簡單恢復,其後可能會進行一些手動恢復。不幸的是,現在大多數人甚至沒有備份。