>데이터 베이스 >MySQL 튜토리얼 >MySQL의 ON DELETE CASCADE는 어떻게 외래 키 관계를 처리하고 고아 레코드를 방지합니까?

MySQL의 ON DELETE CASCADE는 어떻게 외래 키 관계를 처리하고 고아 레코드를 방지합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-12 13:12:17924검색

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

MySQL 외래 키 제약 조건을 사용한 연속 삭제

데이터 무결성을 보장하고 고아 레코드를 방지하는 것은 관계형 데이터베이스 관리에서 매우 중요합니다. 이러한 목표를 달성하기 위해 MySQL은 계단식 삭제를 통해 강력한 외래 키 제약 조건을 제공합니다.

Creating Foreign Key Constraints with 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_id는 삭제된 카테고리와 일치합니다. 그러나 제품 테이블에는 외래 키 관계가 정의되어 있지 않기 때문에 삭제가 더 이상 해당 테이블에 계단식으로 적용되지 않습니다.

예를 들어 '파란색' 카테고리를 삭제하면 카테고리_제품의 다음 레코드가 삭제됩니다.

(blue, mittens)
(blue, boots)

단, '부츠', '장갑' 제품은 그대로 제품에 남아있습니다.

의도하지 않은 데이터 손실 방지

잠재적인 데이터 손실을 방지하려면 단계적 삭제를 구현하기 전에 연쇄 삭제의 영향을 신중하게 고려하는 것이 중요합니다. 예를 들어 설명하신 시나리오에서 다른 제품과 연결된 카테고리를 삭제하면 해당 제품도 삭제됩니다.

따라서 잠재적인 결과를 철저하게 평가하고 관계를 명확하게 정의하는 것이 중요합니다. 계단식 삭제로 인해 데이터 무결성이 손상되지 않도록 테이블 사이에 배치하세요.

위 내용은 MySQL의 ON DELETE CASCADE는 어떻게 외래 키 관계를 처리하고 고아 레코드를 방지합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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