ホームページ >データベース >mysql チュートリアル >ON DELETE CASCADE は MySQL 外部キー制約の関連テーブルにどのような影響を与えますか?

ON DELETE CASCADE は MySQL 外部キー制約の関連テーブルにどのような影響を与えますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-15 05:43:08542ブラウズ

How Does ON DELETE CASCADE Affect Related Tables in MySQL Foreign Key Constraints?

カスケード削除による MySQL 外部キー制約

外部キー制約は、データの整合性を維持し、リレーショナル データベースでの孤立を防ぐ上で重要な役割を果たします。 MySQL では、ON DELETE CASCADE オプションを使用して、親レコードを削除すると、関連する子レコードも自動的に削除されるようにできます。

カスケード削除で外部キー制約を設定するには、次の点を考慮してください。テーブル:

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

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

CREATE TABLE categories_products (
    category_id INT NOT NULL,
    product_id INT NOT NULL,
    PRIMARY KEY (category_id, product_id)
) ENGINE=InnoDB;

ALTER TABLE products
ADD FOREIGN KEY (category_id) REFERENCES categories (id)
ON DELETE CASCADE;

この設定では、製品にはカテゴリを参照する外部キーがあり、参照されるカテゴリが次の場合に製品を自動的に削除するように ON DELETE CASCADE が指定されています。削除されました。ただし、このカスケードは、category_id が削除されたカテゴリと一致する category_products 内のレコードにのみ影響します。

たとえば、次のデータがあるとします。

categories:
+----+------+
| id | name |
+----+------+
| 1  | red  |
| 2  | blue |
+----+------+

products:
+----+---------+------+
| id | name    | category_id |
+----+---------+------+
| 1  | mittens | 1           |
| 2  | boots   | 1           |
| 3  | gloves  | 2           |
+----+---------+------+

categories_products:
+------------+-------------+
| category_id | product_id |
+------------+-------------+
| 1          | 1           |
| 1          | 2           |
| 2          | 3           |
+------------+-------------+

「red」を削除した場合category:

DELETE FROM categories WHERE (id = 1);

カスケードは category_products テーブルにのみ適用されるため、products テーブルは影響を受けません。その結果、データは次のようになります。

categories:
+----+------+
| id | name |
+----+------+
| 2  | blue |
+----+------+

products:
+----+---------+------+
| id | name    | category_id |
+----+---------+------+
| 2  | boots   | 1           |
| 3  | gloves  | 2           |
+----+---------+------+

categories_products:
+------------+-------------+
| category_id | product_id |
+------------+-------------+
| 2          | 3           |
+------------+-------------+

この配置により、無関係なレコードの意図しない削除を回避しながら、参照整合性を維持できます。

以上がON DELETE CASCADE は MySQL 外部キー制約の関連テーブルにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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