プロジェクトでは、一般的に次のような状況に遭遇します: 論理削除とマルチ関連付けが削除されない
論理削除 (ソフト削除): 論理削除は、削除するデータに削除マークを付けることです。通常は、is_deleted フィールドを使用して、行レコードが削除されたかどうかを示します (または、ステータス フィールドを使用して、いわゆる「削除」ステータスを表します)。論理的には、データは削除されますが、データ自体はまだ存在します。
推奨コース: MySQL チュートリアル
はフロントエンド ページで削除され、表示されません。データベースでは削除されません。ステータス フィールドの考え方に基づいており、0 で開始、1 で非アクティブ化されます。
つまり、論理的な削除は、ステータスという名前のフィールドを変更して、フロントエンド ページが表示されるかどうかを決定するだけです。データ自体は削除されていません。復元したい場合は、ステータスを変更するだけで済みます。フィールドバック。
アイデア:
XML でクエリ SQL を記述する場合、ライブラリのステータス フィールドという条件をもう 1 つ追加します。
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 をこのようにして、フロントエンドはステータス 0
のデータのみを参照し、論理的な削除によりステータス コードが 1 に更新され、削除の代わりに更新が呼び出されます。流域の下にぶら下がっているなどのテーブル関係 流域を論理的に削除すると、その下にある水系も論理的に削除され表示されなくなりますが、このとき流域の下に対応する水系があれば該当するものと判断できますは削除されません、そうでない場合は削除されます
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 中国語 Web サイトの他の関連記事を参照してください。