首頁  >  文章  >  資料庫  >  mysql邏輯刪除如何恢復

mysql邏輯刪除如何恢復

(*-*)浩
(*-*)浩原創
2019-05-10 10:58:084284瀏覽

在專案中,一般會遇到這種情況:邏輯刪除以及多重關聯不刪除

邏輯刪除(軟刪除):邏輯刪除就是對要被刪除的資料打上一個刪除標記,通常使用一個is_deleted欄位標示行記錄是不是被刪除(或使用一個status欄位代表所謂的「刪除」狀態),在邏輯上是資料是被刪除的,但資料本身是依然存在的。

推薦課程:MySQL教學

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn