資訊系統常需提供「刪除後可恢復」功能,類似 Windows 回收站。核心在於避免物理刪除資料,改用邏輯標記實現軟刪除。
CREATE TABLE files (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
path VARCHAR(1024),
size BIGINT,
deleted TINYINT DEFAULT 0 COMMENT '0-正常 1-已刪除',
delete_time DATETIME NULL COMMENT '刪除時間',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP
);
| 操作 | SQL 示例 |
|---|---|
| 刪除 | UPDATE files SET deleted=1, delete_time=NOW() WHERE id=? |
| 查詢列表(含回收站) | SELECT * FROM files WHERE deleted=1 ORDER BY delete_time DESC |
| 恢復 | UPDATE files SET deleted=0, delete_time=NULL WHERE id=? |
| 永久刪除 | DELETE FROM files WHERE id=? AND deleted=1 |
| 自動清理 | 定時任務清理 delete_time < 30天前 的記錄 |
UNIQUE KEY uk_name_deleted (name, deleted) 允許同名檔案在正常與回收站並存deleted 分區提升查詢效能include_deleted 參數控制是否返回已刪除數據軟刪除是實現資料恢復的標準模式,關鍵在於不執行物理 DELETE,改用狀態欄位標記。配合合理的索引、定時清理策略與應用層協作,即可構建穩健的回收站機制。