집 >데이터 베이스 >MySQL 튜토리얼 >MySQL 상위-하위 관계에서 계단식 삭제를 방지하는 방법은 무엇입니까?
상위-하위 테이블 관계에 대한 계단식 삭제 제한
MySQL에서 데이터 무결성을 유지하기 위해 외래 키를 사용할 때 영향을 이해하는 것이 중요합니다. 계단식 삭제. "ON DELETE CASCADE" 절을 사용하면 상위 레코드가 삭제될 때 하위 레코드를 자동으로 삭제할 수 있습니다. 그러나 하위 레코드가 분리되는 연속 삭제를 방지해야 하는 경우 외래 키를 신중하게 구성해야 합니다.
예: 카테고리-제품 관계
고려하세요. 다음 예제 테이블은 다음과 같습니다.
CREATE TABLE categories ( id INT PRIMARY KEY, name VARCHAR(255) ); CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(255) ); CREATE TABLE categories_products ( category_id INT, product_id INT, 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 );
카테고리를 삭제하면 일반적으로 계단식으로 삭제됩니다. 해당 제품이 다른 카테고리에도 속해 있는지 여부에 관계없이 해당 카테고리와 관련된 모든 제품.
올바른 외래 키 설정
이러한 바람직하지 않은 계단식 동작을 방지하려면 카테고리_제품 테이블의 외래 키 정의를 수정해야 합니다.
CREATE TABLE categories_products ( category_id INT, product_id INT, PRIMARY KEY (category_id, product_id), FOREIGN KEY (category_id) REFERENCES categories(id) ON DELETE SET NULL ON UPDATE CASCADE, FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE ON UPDATE CASCADE );
ON DELETE 규칙을 다음으로 변경합니다. SET NULL을 사용하면 카테고리가 삭제될 때 카테고리_제품 테이블의 카테고리 ID 열을 NULL로 설정하도록 MySQL에 지시합니다. 이렇게 하면 카테고리와 제품 간의 연결이 제거되지만 제품 자체는 삭제되지 않습니다.
선택적 계단식
이 접근 방식을 사용하면 카테고리를 삭제하면 해당 카테고리와 독점적으로 연관된 제품을 계단식으로 배열하고 삭제합니다. 여러 카테고리에 속하는 상품은 영향을 받지 않습니다.
예를 들어 다음 데이터를 고려하십시오.
categories: products: +----+---------+ +----+--------+ | id | name | | id | name | +----+---------+ +----+--------+ | 1 | Apparel | | 1 | Shirt | | 2 | Electronics | | 2 | Phone | +----+---------+ +----+--------+ categories_products: +------------+-------------+ | product_id | category_id | +------------+-------------+ | 1 | 1 | // Apparel - Shirt | 1 | 2 | // Electronics - Shirt | 2 | 2 | // Electronics - Phone +------------+-------------+
의류 카테고리를 삭제하면 다음에서 의류 - 셔츠 항목만 삭제됩니다. 카테고리_제품 테이블. 셔츠 제품(id = 1)은 전자제품 카테고리에도 연결되어 있으므로 계속 존재합니다.
위 내용은 MySQL 상위-하위 관계에서 계단식 삭제를 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!