ホームページ >データベース >mysql チュートリアル >MySQL の ON DELETE CASCADE は外部キー関係をどのように処理し、孤立レコードを防ぐのでしょうか?

MySQL の ON DELETE CASCADE は外部キー関係をどのように処理し、孤立レコードを防ぐのでしょうか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-12 13:12:17923ブラウズ

How Does MySQL's ON DELETE CASCADE Handle Foreign Key Relationships and Prevent Orphan Records?

MySQL 外部キー制約を使用したカスケード削除

データの整合性を確保し、孤立したレコードを防ぐことは、リレーショナル データベース管理において重要です。これらの目標を達成するために、MySQL はカスケード削除による強力な外部キー制約を提供します。

DELETE ON CASCADE を使用した外部キ​​ー制約の作成

カスケード削除による外部キー関係を確立するには、次の構文を使用します:

FOREIGN KEY (foreign_column) REFERENCES table (primary_key)
ON DELETE CASCADE
ON UPDATE CASCADE

たとえば、次のテーブルがあるとします。

CREATE TABLE categories (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(255)
) ENGINE=InnoDB;

CREATE TABLE products (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(255)
) ENGINE=InnoDB;

CREATE TABLE categories_products (
    category_id INT NOT NULL,
    product_id INT NOT NULL,
    PRIMARY KEY (category_id, product_id),
    FOREIGN KEY (category_id) REFERENCES categories (id)
        ON DELETE CASCADE
        ON UPDATE CASCADE,
    FOREIGN KEY (product_id) REFERENCES products (id)
        ON DELETE CASCADE
        ON UPDATE CASCADE
) ENGINE=InnoDB;

カスケード削除について

カテゴリ テーブルからレコードを削除すると、関連するレコードがシステムによって自動的に削除されます。 category_products テーブル内で、category_id が削除されたカテゴリと一致します。ただし、products テーブルには外部キー関係が定義されていないため、削除はそれ以上カスケードされません。

たとえば、「blue」カテゴリを削除すると、category_products 内の次のレコードが削除されます。

(blue, mittens)
(blue, boots)

ただし、商品の「ブーツ」と「ミトン」はそのままの状態で商品に残ります。 table.

意図しないデータ損失の防止

潜在的なデータ損失を回避するには、カスケード削除を実装する前にその影響を慎重に検討することが重要です。たとえば、説明したシナリオでは、他の製品にも関連付けられているカテゴリを削除すると、それらの製品も削除されます。

したがって、潜在的な影響を徹底的に評価し、関係を明確に定義することが重要です。カスケード削除によってデータの整合性が損なわれないようにするため、テーブル間での削除が行われます。

以上がMySQL の ON DELETE CASCADE は外部キー関係をどのように処理し、孤立レコードを防ぐのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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