目次
はじめに
削除方法
物理的な削除
逻辑删除
应用场景
实现思路
标记删除
拉链
マーク削除
ジッパー
写在最后
ホームページ データベース mysql チュートリアル データベースのレコードを削除するにはどのような方法がありますか?

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

Sep 30, 2017 am 10:06 AM
どれの データベース 方法

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

はじめに

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

削除方法

物理的な削除

物理的な削除は、データベースから 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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go 言語はデータベースの追加、削除、変更、クエリ操作をどのように実装しますか? Go 言語はデータベースの追加、削除、変更、クエリ操作をどのように実装しますか? Mar 27, 2024 pm 09:39 PM

Go 言語は、効率的かつ簡潔で習得が容易なプログラミング言語であり、同時プログラミングやネットワーク プログラミングに優れているため、開発者に好まれています。実際の開発ではデータベースの操作が欠かせませんが、今回はGo言語を使ってデータベースの追加・削除・変更・クエリ操作を実装する方法を紹介します。 Go 言語では、データベースを操作するために通常、よく使用される SQL パッケージや gorm などのサードパーティ ライブラリを使用します。ここでは SQL パッケージを例として、データベースの追加、削除、変更、クエリ操作を実装する方法を紹介します。 MySQL データベースを使用していると仮定します。

Hibernate はポリモーフィック マッピングをどのように実装しますか? Hibernate はポリモーフィック マッピングをどのように実装しますか? Apr 17, 2024 pm 12:09 PM

Hibernate ポリモーフィック マッピングは、継承されたクラスをデータベースにマップでき、次のマッピング タイプを提供します。 join-subclass: 親クラスのすべての列を含む、サブクラス用の別個のテーブルを作成します。 table-per-class: サブクラス固有の列のみを含む、サブクラス用の別個のテーブルを作成します。 Union-subclass: join-subclass と似ていますが、親クラス テーブルがすべてのサブクラス列を結合します。

iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます iOS 18では、紛失または破損した写真を復元するための新しい「復元」アルバム機能が追加されます Jul 18, 2024 am 05:48 AM

Apple の最新リリースの iOS18、iPadOS18、および macOS Sequoia システムでは、さまざまな理由で紛失または破損した写真やビデオをユーザーが簡単に回復できるように設計された重要な機能が写真アプリケーションに追加されました。この新機能では、写真アプリのツール セクションに「Recovered」というアルバムが導入され、ユーザーがデバイス上に写真ライブラリに含まれていない写真やビデオがある場合に自動的に表示されます。 「Recovered」アルバムの登場により、データベースの破損、カメラ アプリケーションが写真ライブラリに正しく保存されない、または写真ライブラリを管理するサードパーティ アプリケーションによって失われた写真やビデオに対する解決策が提供されます。ユーザーはいくつかの簡単な手順を実行するだけで済みます

PHP でデータベース接続エラーを処理する方法 PHP でデータベース接続エラーを処理する方法 Jun 05, 2024 pm 02:16 PM

PHP でデータベース接続エラーを処理するには、次の手順を使用できます。 mysqli_connect_errno() を使用してエラー コードを取得します。 mysqli_connect_error() を使用してエラー メッセージを取得します。これらのエラー メッセージをキャプチャしてログに記録することで、データベース接続の問題を簡単に特定して解決でき、アプリケーションをスムーズに実行できるようになります。

PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル PHP で MySQLi を使用してデータベース接続を確立するための詳細なチュートリアル Jun 04, 2024 pm 01:42 PM

MySQLi を使用して PHP でデータベース接続を確立する方法: MySQLi 拡張機能を含める (require_once) 接続関数を作成する (functionconnect_to_db) 接続関数を呼び出す ($conn=connect_to_db()) クエリを実行する ($result=$conn->query()) 閉じる接続 ( $conn->close())

HTML がデータベースを読み取る方法の詳細な分析 HTML がデータベースを読み取る方法の詳細な分析 Apr 09, 2024 pm 12:36 PM

HTML はデータベースを直接読み取ることはできませんが、JavaScript と AJAX を通じて実現できます。この手順には、データベース接続の確立、クエリの送信、応答の処理、ページの更新が含まれます。この記事では、JavaScript、AJAX、および PHP を使用して MySQL データベースからデータを読み取る実践的な例を示し、クエリ結果を HTML ページに動的に表示する方法を示します。この例では、XMLHttpRequest を使用してデータベース接続を確立し、クエリを送信して応答を処理することで、ページ要素にデータを埋め込み、データベースを読み取る HTML の機能を実現します。

PHP を使用してデータベース内の中国語の文字化けを処理するためのヒントと実践 PHP を使用してデータベース内の中国語の文字化けを処理するためのヒントと実践 Mar 27, 2024 pm 05:21 PM

PHP は Web サイト開発で広く使用されているバックエンド プログラミング言語であり、強力なデータベース操作機能を備えており、MySQL などのデータベースとの対話によく使用されます。ただし、中国語の文字エンコーディングは複雑であるため、データベース内で中国語の文字化けを処理するときに問題が発生することがよくあります。この記事では、文字化けの一般的な原因、解決策、具体的なコード例を含め、データベース内の中国語の文字化けを処理するための PHP のスキルと実践方法を紹介します。文字化けの一般的な原因は、データベースの文字セット設定が正しくないことです。データベースの作成時に、utf8 や u などの正しい文字セットを選択する必要があります。

Golangを使用してリモートデータベースに接続するにはどうすればよいですか? Golangを使用してリモートデータベースに接続するにはどうすればよいですか? Jun 01, 2024 pm 08:31 PM

Go 標準ライブラリのデータベース/SQL パッケージを通じて、MySQL、PostgreSQL、SQLite などのリモート データベースに接続できます。データベース接続情報を含む接続文字列を作成します。 sql.Open() 関数を使用してデータベース接続を開きます。 SQL クエリや挿入操作などのデータベース操作を実行します。 defer を使用してデータベース接続を閉じ、リソースを解放します。

See all articles