ホームページ >データベース >mysql チュートリアル >データベースのレコードを削除するにはどのような方法がありますか?

データベースのレコードを削除するにはどのような方法がありますか?

一个新手
一个新手オリジナル
2017-09-30 10:06:191658ブラウズ

データベースのレコードを削除するにはどのような方法がありますか?

はじめに

データの価値が失われた場合、データベースのレコードを削除することがよくありますが、操作が不適切な場合、重要なデータが誤って削除されることがよくあります。合理的な削除方法を使用することによってのみ、データ リソースをより有効に活用できます。一般的に使用される削除方法をいくつか紹介します。

削除方法

物理的な削除

物理的な削除は、データベースから 1 つ以上のレコードを直接削除し、ディスクからデータを消去します。この方法は、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 に設定されます。クエリを実行するときに、0 としてマークされたレコードをフィルターして削除するための where 条件を追加します。これにより、現時点では、削除業務に必要なだけの論理的な削除機能を実現できます。レコードを削除対象としてマークするには、フィールドを 1 に変更するだけです。
  • ジッパー

  • ジッパー メソッドはデータ ウェアハウスに由来し、データ ウェアハウス設計でテーブルがデータを保存する方法のために定義されています。いわゆるジッパーは、履歴を記録し、物事のすべての変更を記録します。現状の情報を始めます。ジッパー アルゴリズムは、データ ウェアハウスの分野で最も代表的なアルゴリズムの 1 つです。
このテーブル構造と通常のテーブルの違いは、レコードの有効時間を示すフィールド (START_DATE&END_DATE) がさらに 2 つあり、それぞれ時間とレコードが追加されることです。レコードの最大有効時間。


    データ テーブルは、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。