2015-08-27 135 views
3

我正在使用Mysql並且錯誤地刪除了非常重要的細節。有沒有辦法在Mysql中恢復已刪除的記錄?有沒有辦法在一個月前刪除Mysql中已刪除的行

+1

提示:用布爾值創建一個新列。如果該布爾值爲0,則該記錄已被刪除,如果1不被刪除。始終更新該列,並且永不丟失數據。不要使用'DELETE'語句。 –

+0

如果你決定實際使用'DELETE',另一個選擇是保留一個保存已刪除記錄的備份數據庫。 –

+0

@ Luis你可以詳細一點,我可以在刪除信息的地方做什麼,所以通過人爲錯誤,我刪除了真正的信息多餘的刪除測試一,但刪除了真實 –

回答

2

我知道這是不是真的,你問什麼,但我覺得很重要的是你知道這一點。

我建議的系統是大數據。它的工作原理如下:

  1. 在表創建一個新的列(前表人)

     
    ID | Name | Deleted 
    1 | Bob | 0 
    2 | Frank | 1 
    3 | Alice | 0 
    

    隨着0爲取消刪除和1爲已刪除在最後一欄與該類型BOOLEAN。名稱和ID分別爲NVARCHARINT

  2. 如果你想刪除的記錄,你不要用DELETE語句刪除它,但更新這樣的:

     
    UPDATE people SET Deleted = 1 WHERE ID = 1 
    

    結果:

     
    ID | Name | Deleted 
    1 | Bob | 1 
    2 | Frank | 1 
    3 | Alice | 0 
    

    你知道ID的1和2被刪除,因爲在Deleted列中的布爾值爲1.愛麗絲與ID 3不會被刪除,因爲布爾是在第0


該系統的pro是你可以只用一個聲明恢復數據!

UPDATE people SET Deleted = 0 WHERE Deleted = 1 

結果:

ID | Name | Deleted 
1 | Bob | 0 
2 | Frank | 0 
3 | Alice | 0 

現在所有的記錄中恢復,因爲在Deleted列布爾是0

如果使用DELETE聲明,這是不可能收回所有記錄!它們會被永久刪除,如果您使用DELETE語句,則永遠無法恢復。您只能使用一個備份文件進行恢復,但也已經禁忌的,如:

  • 這是一箇舊的備份文件,
  • 我已經忘了做一個,
  • 我不知道你怎麼能撐得
  • 我已經失去了它,
  • ...

通過大數據和他更新你改變只有一列,你有你的數據備份。


編輯:
禁忌大數據的(如你所說)數據不完全從數據庫中刪除。這只是一個從0到1的列。但如果你知道你可以從數據中賺錢......這是另一回事。

如果要準確刪除它,可以使用DELETE語句。有很多的網站,程序,使用大數據,如服務:

  • 堆棧溢出交易所的其他社區(僅註釋與DELETE語句中刪除,問題不是)
  • 郵件服務器如Gmail,Hotmail的,雅虎(從收件箱中的垃圾,然後取出)
  • 從計算機中刪除文件夾或文件(從原來的位置移到回收站,然後取出)
  • 社交媒體網站
  • ...

有關大數據的更多信息,您可以查看this wikipedia article

+0

非常感謝您的詳細信息,非常有用的一個。因此,首先我需要添加一列刪除。但事實上,在命令後,更新人員SET刪除= 1 WHERE ID = 1信息沒有刪除從Db?我的目標與刪除是沒有沉重的Db與奇怪的信息,這就是爲什麼我刪除記錄 –

+1

是的,Luïs建議你從來沒有實際刪除任何行,你只是有一個刪除列包含1或0.如果值是1,那麼列被刪除。所以你只需選擇你的數據'WHERE deleted = 0'。這將防止丟失數據行的任何問題 –

+0

是的,我知道這一點。這是使用大數據的對立面。但如果你知道數據就是金錢......你就去想想金錢。如果你準確地刪除它,你也可以使用'DELETE'語句修改'UPDATE',如果用戶想要的話。 –

1

您是否有插入這些記錄的日期的binlog文件?

然後你就可以得到插件,並把它背

+1

你可以解釋一下,我是binlog中的新手@Bernd Buffen –

+1

MySQL在二進制日誌文件中寫入任何「寫入」。這是可用於複製或恢復 在這裏你可以找到詳細信息 https://mariadb.com/kb/en/mariadb/binary-log/ –

+0

在該文件中,我可以找到一個信息被刪除某個日期? –

相關問題