>데이터 베이스 >MySQL 튜토리얼 >ON DELETE CASCADE는 MySQL 외래 키 제약 조건의 관련 테이블에 어떤 영향을 미칩니까?

ON DELETE CASCADE는 MySQL 외래 키 제약 조건의 관련 테이블에 어떤 영향을 미칩니까?

Susan Sarandon
Susan Sarandon원래의
2024-12-15 05:43:08546검색

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는 참조된 카테고리가 삭제되면 자동으로 제품을 삭제하도록 지정됩니다. 그러나 이 캐스케이드는 카테고리 ID가 삭제된 카테고리와 일치하는 카테고리_제품의 레코드에만 영향을 미칩니다.

예를 들어 다음 데이터가 있는 경우:

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           |
+------------+-------------+

'빨간색'을 삭제하는 경우 카테고리:

DELETE FROM categories WHERE (id = 1);

계단식은 카테고리_제품 테이블에만 적용되므로 제품 테이블은 영향을 받지 않습니다. 결과적으로 데이터는 다음과 같습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.