ホームページ >データベース >mysql チュートリアル >ON DELETE CASCADE は MySQL 外部キー制約の関連テーブルにどのような影響を与えますか?
カスケード削除による 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 サイトの他の関連記事を参照してください。