在專案中,一般會遇到這種情況:邏輯刪除以及多重關聯不刪除
邏輯刪除(軟刪除):邏輯刪除就是對要被刪除的資料打上一個刪除標記,通常使用一個is_deleted欄位標示行記錄是不是被刪除(或使用一個status欄位代表所謂的「刪除」狀態),在邏輯上是資料是被刪除的,但資料本身是依然存在的。
推薦課程:MySQL教學
#在前端頁面中刪除了,也不顯示了,其實資料庫中並沒有刪除,只是根據了一個狀態字段,0啟動,1停用的思路來達成。
所以邏輯刪除就是只是將一個名為status欄位進行更改,來達到前端頁面是否顯示的方式,其資料本身並沒有被刪除,想要恢復只需要改回status欄位。
思路:
在XML中寫查詢SQL時,多加一個條件,庫中的狀態字段
SELECT * FROM md_drainage_basin <where> <if test="basinName != null"> and basin_name LIKE concat('%',#{basinName},'%')</if> <if test="state != null">AND state = #{state}</if> </where> ORDER BY sort_order
那我們給前端頁面時候的數據,就要自己在Java程式碼中進行預設操作,因為前端是不會在查詢的傳送一個狀態碼的,後台自己產生
mdDrainageBasin.setState(0); List<MdDrainageBasin> list = mdDrainageBasinMapper.findByQuery(mdDrainageBasin);
預設把狀態0啟動set到實體類別中,再進行查詢,這樣前端看到的只有狀態為0的資料
邏輯刪除是把狀態碼更新,更新成1,呼叫update而不是delete,但考慮到多表關係,例如流域下面掛著水系,邏輯刪除一條流域,那下面的水係也要進行邏輯刪除不給與顯示,這時可根據判斷,如果流域下面有相應水系,則不刪除,不然刪除
MdDrainageBasin mdDrainageBasin = mdDrainageBasinService.findById(id); List<MdWaterSystem> list = mdWaterSystemMapper.findByWater(mdDrainageBasin.getBasinCode()); if (list.size() > 0) { return ResponseMsgUtil.failure(); } else { mdDrainageBasin.setState(1); mdDrainageBasinService.update(mdDrainageBasin); return ResponseMsgUtil.success(mdDrainageBasin); }
根據前端傳入的Id進行查詢哪一條流域,這條流域下面有多少水系,有水系,不刪除,沒水系,刪除
以上是mysql邏輯刪除如何恢復的詳細內容。更多資訊請關注PHP中文網其他相關文章!