ホームページ > データベース > mysql チュートリアル > DELETE ON CASCADE を使用した MySQL 外部キー制約はデータの不整合をどのように防ぐことができますか?

DELETE ON CASCADE を使用した MySQL 外部キー制約はデータの不整合をどのように防ぐことができますか?

Mary-Kate Olsen
リリース: 2024-12-13 07:15:10
オリジナル
260 人が閲覧しました

How Can MySQL Foreign Key Constraints with DELETE ON CASCADE Prevent Data Inconsistency?

MySQL 外部キー制約を使用してデータの不整合を防ぐ

データの整合性を維持し、孤立したレコードを回避するには、外部キー制約を実装することが重要です。これは、InnoDB テーブルを使用する場合に特に重要です。外部キーはテーブル間の関係を確立し、親レコードが削除されると、対応する子レコードも自動的に削除されるようにします。

DELETE ON CASCADE について

DELETE ON CASCADE は、親レコードが削除されたときに子レコードを自動的に削除する外部キー制約です。これにより、有効な親レコードのない子レコードが存在するデータの孤立が防止されます。

外部キー制約と DELETE ON CASCADE の設定

DELETE ON で外部キー制約を設定するにはCASCADE、次の手順に従います:

  1. 作成親テーブルと子テーブル: 適切な列と主キーを使用して、親テーブル (カテゴリなど) と子テーブル (製品など) の両方を定義します。
  2. ピボット テーブルの作成:ピボット テーブル (カテゴリ_製品など) を設計して、親と子の間の多対多の関係を確立します。 tables.
  3. 外部キー制約の定義: ピボット テーブルで、親と子の主キーを参照する外部キー制約を作成します。外部キー定義に「ON DELETE CASCADE」句を追加します。

例:

問題ステートメントで言及されているテーブルの例を考えてみましょう:

categories
- id (INT)
- name (VARCHAR 255)

products
- id
- name
- price

categories_products
- categories_id
- products_id
ログイン後にコピー

適切な外部キー制約を設定するには、次のようにテーブルを作成します。

CREATE TABLE categories (
    id int unsigned not null primary key,
    name VARCHAR(255) default null
)Engine=InnoDB;

CREATE TABLE products (
    id int unsigned not null primary key,
    name VARCHAR(255) default null
)Engine=InnoDB;

CREATE TABLE categories_products (
    category_id int unsigned not null,
    product_id int unsigned not null,
    PRIMARY KEY (category_id, product_id),
    KEY pkey (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;
ログイン後にコピー

この設定では、カテゴリを削除すると、products テーブルの整合性を維持しながら、category_products 内の対応するレコードのみが削除されます。ただし、商品を削除してもカテゴリ テーブルには影響しません。

DELETE ON CASCADE を使用して外部キー制約を慎重に実装することで、データの整合性を維持し、データの破損を防ぎ、データベースにレコード間の正しい関係が確実に反映されるようにすることができます。

以上がDELETE ON CASCADE を使用した MySQL 外部キー制約はデータの不整合をどのように防ぐことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート