>  기사  >  데이터 베이스  >  데이터베이스 레코드를 삭제하는 방법은 무엇입니까?

데이터베이스 레코드를 삭제하는 방법은 무엇입니까?

一个新手
一个新手원래의
2017-09-30 10:06:191626검색

데이터베이스 레코드를 삭제하는 방법은 무엇입니까?

소개

데이터가 가치를 잃으면 삭제하는 것이 매우 일반적입니다. 그러나 작업이 부적절하면 일부 귀중한 데이터가 실수로 삭제되어 중요한 데이터가 되는 경우가 많습니다. 합리적인 삭제 방법을 사용해야만 데이터 리소스를 더 잘 활용할 수 있습니다. 다음은 일반적으로 사용되는 삭제 방법입니다.

삭제 방법

물리적 삭제

물리적 삭제는 데이터베이스에서 하나 이상의 레코드를 직접 삭제하고 디스크에서 데이터를 지우는 방법입니다. 이 방법은 DELETE FROMSQL 문을 사용하여 수행할 수 있습니다. 결과적으로 기록은 영구적으로 삭제되어 검색할 수 없습니다. 이는 일반적으로 소규모 프로젝트나 데이터 중요도가 낮은 프로젝트에 적합하며 데이터베이스 리소스 활용도를 향상시킬 수 있습니다. 물리적 삭제 방법은 가장 간단하고 기본적인 데이터 삭제 방법이므로 여기서는 주로 논리적 삭제 방법에 대해 살펴보겠습니다. DELETE FROMSQL语句实现,这种方式产生的后果就是记录永久性删除,无法找回,一般适用于小型或数据重要性不高的项目,可以提高数据库资源利用率。物理删除方式是一种最简单最基本的数据删除方式,这里不多做介绍,我们主要来看一下逻辑删除方式。

逻辑删除

所谓的逻辑删除就是实现记录已删除的效果,但实际上数据仍然存在于数据库中,只是对用户隐藏这一部分数据。一些大型的、数据关联性高、数据重要性高的应用往往会采用这种删除方式,它可以实现回收站、删除恢复、查看历史版本等实用功能,根据业务的需要有不同的应用场景。

应用场景

例如,在一些邮箱应用中,当你删除一条邮件时,不会将邮件直接删除,而是把邮件移动到回收站,你可以在回收站中对邮件进行恢复、彻底删除等操作,可以有效防止误删等情况。
再比如博客管理平台一般都会提供查看修改历史、比较历史版本等功能,我们可以方便地查看文章的修改历史,以及恢复到之前某一版本。

实现思路

标记删除

采用删除标记的方式可以很容易地实现逻辑删除功能,通过在表中添加一个删除标记字段,将正常记录的该字段设置为0,已删除记录的该字段设置为1,查询时添加一个where条件筛选删除标记为0的记录,就可以实现逻辑删除的功能,此时的删除业务只需要将记录的删除标记字段修改为1即可。

拉链

拉链方式来源于数据仓库,是针对数据仓库设计中表存储数据的方式而定义的,所谓拉链,就是记录历史,记录一个事物从开始到当前状态的所有变化信息。拉链算法是目前数据仓库领域最典型的算法之一。
这种方式的表结构与普通表的区别在于多了两个字段(START_DATE&END_DATE)表示记录的有效时间,分别为记录添加时间和记录最大有效时间。

  • 数据表采用联合主键的方式,使用idSTART_DATE来唯一的表示某条记录,如:


    CREATE TABLE `table_name` (
    `id` INT NOT NULL AUTO_INCREMENT,
    `start_date` datetime NOT NULL,
    `end_date` datetime NOT NULL,
    ...,primary key(`id`,`start_date`)
    )ENGINE=MYISAM DEFAULT CHARSET=utf8;
  • 新增记录时START_DATE可设置为当前时间,END_DATE设置为null或未来某个时间来表示无穷大,如:


    insert into table_name(start_date,end_date,...) values(当前时间,一百年后,...);
  • 查询数据时只要对日期进行筛选就可得到当前有效的记录,例如


    select * from table_name where id=记录ID and start_date<=当前时间 and end_date>当前时间;
  • 修改记录的方式与传统方式不同,修改操作并不是直接修改数据库中的某条记录,而是把修改的原有效记录的END_DATE设置为当前时间,接下来新增一条完整的、修改后的记录,如:


    update table_name set end_date=当前时间 where id=原记录ID and end_date=一百年后;insert into table_name(id,start_date,end_date,...) values(原记录ID,当前时间,一百年后,...);
  • 删除操作很简单,不是真的将记录从数据表中移除,只需把记录的END_DATE

    논리적 삭제


    소위 논리적 삭제는 기록이 삭제된 효과를 얻는 것이지만 실제로는 데이터베이스에 데이터가 여전히 존재하지만 데이터의 이 부분은 사용자에게 숨겨집니다. 데이터 상관 관계가 높고 데이터 중요도가 높은 일부 대규모 애플리케이션에서는 이 삭제 방법을 사용하는 경우가 많습니다. 휴지통, 삭제 복구, 기록 버전 보기 등의 실용적인 기능을 구현할 수 있으며 비즈니스 요구 사항에 따라 다양한 애플리케이션 시나리오가 있습니다.

  • 응용 시나리오
  • 예를 들어 일부 사서함 응용 프로그램에서는 이메일을 삭제하면 이메일이 직접 삭제되지 않지만 이메일은 휴지통으로 이동되어 이메일을 복원하거나 완전히 삭제할 수 있습니다. 실수로 인한 삭제 및 기타 상황을 효과적으로 방지할 수 있습니다.
    또 다른 예로, 블로그 관리 플랫폼은 일반적으로 수정 내역 보기, 이전 버전 비교 등의 기능을 제공하므로 쉽게 기사 수정 내역을 확인하고 이전 버전으로 복원할 수 있습니다.

    구현 아이디어

    마크 삭제

  • 테이블에 삭제 마크 필드를 추가하여 일반 레코드의 필드를 0으로 설정하면 논리적 삭제 기능을 쉽게 구현할 수 있습니다. 삭제된 레코드의 개수는 1로 설정됩니다. 쿼리 시 where 조건을 추가하여 0으로 표시된 레코드를 필터링하고 삭제합니다. 이를 통해 논리적 삭제 기능을 구현할 수 있습니다. 이때 삭제 업무는 다음과 같습니다. 삭제할 레코드를 표시하십시오. 필드를 1로 변경하십시오.
  • 지퍼

  • 지퍼 방식은 데이터 웨어하우스에서 유래했으며 데이터 웨어하우스 설계에서 테이블이 데이터를 저장하는 방식으로 정의됩니다. 소위 지퍼는 기록을 기록하고 사물의 모든 변경 사항을 기록하는 것입니다. 현재 상태 정보부터 시작합니다. 지퍼 알고리즘은 데이터 웨어하우스 분야에서 가장 일반적인 알고리즘 중 하나입니다.
이 테이블 구조와 일반 테이블의 차이점은 레코드의 유효 시간을 나타내는 두 개의 필드(START_DATE&END_DATE)가 더 있다는 점입니다. 기록에 기록 최대 유효 시간.


    데이터 테이블은 idSTART_DATE를 사용하여 특정 레코드를 고유하게 나타내는 공동 기본 키 방법을 사용합니다. 예: 🎜🎜🎜🎜
    update table_name set end_date=当前时间 where id=删除记录ID;
    🎜🎜🎜기록을 추가할 때 START_DATE는 현재 시간으로 설정할 수 있고 END_DATE는 null 또는 시간으로 설정할 수 있습니다. 🎜 🎜🎜🎜
    select start_date from table_name where id=记录ID order by start_date;
    🎜🎜🎜데이터를 쿼리할 때 현재 유효한 레코드를 가져오려면 날짜만 필터링하면 됩니다. 예를 들어 🎜🎜🎜🎜
    select * from table_name where id=记录ID and start_date=版本日期;
    🎜🎜🎜수정하는 방법입니다. 레코드는 기존 방식과 다릅니다. 수정 작업은 데이터베이스의 레코드를 직접 수정하지 않고 대신 수정된 원래 유효한 레코드의 END_DATE를 현재 시간으로 설정합니다. 다음과 같이 완전하고 수정된 레코드를 추가합니다. 🎜🎜🎜🎜rrreee🎜🎜🎜삭제 작업은 실제로 데이터 테이블에서 레코드를 제거하지 않습니다. END_DATE만 설정하면 됩니다. > 🎜🎜🎜🎜rrreee🎜🎜🎜이렇게 하면 데이터의 변경 사항을 완전히 기록할 수 있습니다. 다음 쿼리 문을 사용하면 레코드의 전체 버전 목록을 가져오고 내용을 볼 수 있습니다. 특정 버전: 🎜" sql🎜-- 버전 목록 가져오기 🎜🎜🎜🎜rrreee🎜🎜🎜- - 특정 버전 콘텐츠 보기🎜🎜
    select * from table_name where id=记录ID and start_date=版本日期;

    写在最后

    不同的业务需要根据其应用场景来选择合适的数据删除方式,一般的应用可以采用物理删除的方式,简单粗暴地将数据擦除,这样可以有效提高数据库地利用率,如果历史数据一点价值都没有或者价值不高,那还留着干什么,这时如果采用逻辑删除地方式反而加重了数据库的负担,浪费了大量宝贵的资源。但是有些项目如金融、交通、能源等领域的历史数据,往往具有很高的利用价值,通过对这些数据进行分析总结,可以更好的了解该领域的发展情况和健康程度,以及对未来的发展规划起到一定指导作用,这时就要采用逻辑删除的方式,虽然数据管理平台为了便于管理,删除了过期的数据,但数据分析系统仍能从数据库中获取到历史数据,通过抽取转换加载的过程,将历史数据转化为高价值的内容,这是目前信息技术发展的主要趋势。

위 내용은 데이터베이스 레코드를 삭제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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