問一個關於網站資料刪除的問題?

來源:互聯網
上載者:User
關鍵字 php mysql sql
先說背景:某日我測試時一下子刪了很重要的東西,一篇重要的文章,立即後悔了,但是卻發現沒有“資源回收筒”,資料表是直接物理刪除的,我的內心是崩潰的……

此後無論做什麼,我都會記住這個深刻的教訓,給自己留一顆後悔藥,總會在建表時留一個is_del欄位以表示是否被刪除了……,所有的刪除不直接物理刪除,然後我就很嘚瑟,再也不怕誤刪了……

但是現在碰到了一個麻煩,某個欄位是唯一索引的,而我暫時不想用這個資料就把它刪了,當然不是真刪了,用is_del標示而已,但是問題就是我現在要添加的一個資料和這個“被刪除”行裡面的唯一欄位重複了,導致我現在如果不真的把那個刪了的話我就添加不了這行資料了。

我想到了兩個解決辦法:不知道合不合理:

1:刪除時將要刪除的資料“剪下”到另外一張“資源回收筒暫存資料表”

2:只剪下要刪除的行的部分資料,比如上文中的唯一索引那個欄位,將當前的衝突欄位資料擦除,放到另外一張暫存資料表上面,用主鍵對應就可以了。

我總覺得是不是我的想法有問題,總感覺欠妥,但又不知道怎麼做,希望有經驗的大神解答指點下哈?

回複內容:

先說背景:某日我測試時一下子刪了很重要的東西,一篇重要的文章,立即後悔了,但是卻發現沒有“資源回收筒”,資料表是直接物理刪除的,我的內心是崩潰的……

此後無論做什麼,我都會記住這個深刻的教訓,給自己留一顆後悔藥,總會在建表時留一個is_del欄位以表示是否被刪除了……,所有的刪除不直接物理刪除,然後我就很嘚瑟,再也不怕誤刪了……

但是現在碰到了一個麻煩,某個欄位是唯一索引的,而我暫時不想用這個資料就把它刪了,當然不是真刪了,用is_del標示而已,但是問題就是我現在要添加的一個資料和這個“被刪除”行裡面的唯一欄位重複了,導致我現在如果不真的把那個刪了的話我就添加不了這行資料了。

我想到了兩個解決辦法:不知道合不合理:

1:刪除時將要刪除的資料“剪下”到另外一張“資源回收筒暫存資料表”

2:只剪下要刪除的行的部分資料,比如上文中的唯一索引那個欄位,將當前的衝突欄位資料擦除,放到另外一張暫存資料表上面,用主鍵對應就可以了。

我總覺得是不是我的想法有問題,總感覺欠妥,但又不知道怎麼做,希望有經驗的大神解答指點下哈?

如果要足夠最佳化的解,那自然是移到其他表去,這樣既不妨礙當前表資料,又利用當前表高效的工作。
如果圖方便,可以弄個複合式索引,將is_del也納入其中。

一般情況下 唯一索引 只能給id nickname 之類的欄位

一條記錄is_del的時候id nickname 之類的被使用了就是被使用,不應該再出現,拿nickname來說,這條記錄被刪除,應該被當作封鎖而不是常規的刪除,某個nickname被刪或者被封鎖以後這個欄位不應該再被拿出來使用。

刪除的時候先把這個記錄複製到到資源回收筒`被刪除資料備份`表可以做,但是更好的做法應該是處理你的唯一索引,確定你這個欄位是否真的需要唯一索引

如果不嫌麻煩就做個日誌系統,所有增刪改的資料都寫入日誌,然後如果有誤操作再根據日誌做復原操作

放到另一張表裡邊吧,保險,而且當你查詢刪除資料的時候可能速度會快一些。不過我感覺放到臨時刪除表的時候,id應該重建了,不然你再刪除相同id的資料,麻煩還是會出現。

建表的時候保留is_delete欄位是一個很好的習慣。
按照你說的,你刪除資料後,又要添加一個和已經刪除記錄的唯一索引欄位相同的記錄,可見你已經刪除的記錄在業務中應該不會在用到了。
我想到的解決方案是:
1.將唯一欄位和is_delete欄位一起設定成唯一索引,這種加入後面需要將刪除的記錄恢複使用很容易處理;
2.在插入唯一重複的記錄時,將刪除的記錄移到history表中,這種原表更簡單,不過後面要恢複以前的記錄有點麻煩;
3.如果插入唯一重複記錄的情況比較多,建議直接採取刪除時候就移到history表中,這樣插入的時候方便。

親,windows系統的資源回收筒難道避免了誤刪重要檔案的結局嗎?

我覺得你想的太多了,從你的故事背景就可以看出來你的立場出了問題。作為一個開發人員,你需要滿足客戶的要求,比如刪除文章這種事情根本不是你應該做的,如果使用者自己刪錯了東西他自己去後悔,和你有什麼關係?就像咱們在這裡發東西,刪掉之後能找回來嗎?開發人員需要為此負責嗎?
日誌其實是很重要的東西,但是通常使用日誌不是為了找回資料,而是為了分析問題,實際上mysql本身也可以開啟日誌,那個可以協助你找回資料,為什麼要在php上重新搞一遍呢?
所以,我的看法是除非客戶說:我們使用的時候經常刪錯東西,別做物理刪除了,這個時候才需要考慮is_del這種方法。但是一般也要講清楚,使用這個方式之後資料就永遠不會刪除了,千萬別說還有一個功能可以把標記為is_del的資料真正刪除,那還是解決不了經常刪錯東西問題。

程式不可能解決使用者犯下的錯誤,所以根本沒必要想太多。對於有些人來說,就算你設計了is_del1,is_del2,is_delN,錯刪資料的事情還是會發生。

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.