>데이터 베이스 >MySQL 튜토리얼 >MySQL의 논리적 삭제를 복구하는 방법

MySQL의 논리적 삭제를 복구하는 방법

(*-*)浩
(*-*)浩원래의
2019-05-10 10:58:084346검색

프로젝트에서 일반적으로 다음과 같은 상황이 발생합니다. 논리적 삭제 및 다중 연결은 삭제되지 않습니다.

논리적 삭제(소프트 삭제): 논리적 삭제는 삭제할 데이터에 삭제 표시를 하는 것입니다. 일반적으로 is_deleted 필드를 사용하여 표시합니다. 행 레코드가 삭제되었는지(또는 소위 "삭제된" 상태를 나타내기 위해 상태 필드가 사용되었는지) 논리적으로 데이터는 삭제되지만 데이터 자체는 여전히 존재합니다.

추천 강좌: MySQL Tutorial

MySQL의 논리적 삭제를 복구하는 방법

프런트 엔드 페이지에서 삭제되어 더 이상 표시되지 않습니다. 실제로 데이터베이스에서는 삭제되지 않았습니다. ​​상태 필드, 시작의 경우 0, 비활성화의 경우 1입니다.

따라서 논리적 삭제는 프런트 엔드 페이지가 표시되는지 여부를 확인하기 위해 상태라는 필드를 변경하는 것입니다. 데이터 자체가 삭제되지 않은 경우 복원하려면 상태 필드만 다시 변경하면 됩니다.

아이디어:

쿼리 SQL을 XML로 작성할 때 라이브러리에 상태 필드라는 조건을 하나 더 추가하세요

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.