CASCADE
기능을 여러 작업, 즉 삭제 또는 업데이트에 사용하는 것이 더 좋습니다.
CASCADE
- ON UPDATE CASCADE
또는 ON UPDATE SET NULL
가 계단식 기간 중 이전에 업데이트 된 동일한 테이블을 업데이트하기 위해 반복되는 경우 RESTRICT
처럼 작동합니다. 즉, 자체 참조 ON 업데이트 캐스케이 또는 ON UPDATE SET NULL
작업을 사용할 수 없습니다. 이는 계단식 업데이트로 인한 무한 루프를 방지하기위한 것입니다. 반면 자기 참조 ON DELETE SET NULL
이 가능하며 자기 참조 ON DELETE CASCADE
도 있습니다. 계단식 작업은 15 레벨 이상 중첩 될 수 없습니다.
가끔 부모 테이블에서 데이터를 삭제할 때 참조 작업의 영향을받는 테이블을 확인하는 것이 유용합니다. 다음과 같이 당신은 INFORMATION_SCHEMA 데이터베이스에 referential_constraints에서이 데이터를 조회 할 수 있습니다
코드 :
USE information_schema;
SELECT table_name
FROM referential_constraints
WHERE constraint_schema = 'database_name' AND
referenced_table_name = 'parent_table' AND
delete_rule = 'CASCADE'
예 :
예를 들어, 건물과 연관된 테이블을 찾을 수 테이블에 CASCADE delete rule
이 classicmodels 데이터베이스에 있으면 다음 쿼리를 사용합니다.
USE information_schema;
SELECT table_name
FROM referential_constraints
WHERE constraint_schema = 'classicmodels' AND
referenced_table_name = 'buildings' AND
delete_rule = 'CASCADE'
DELETE CASCADE
에 대한 또 다른 대안 예 :
경우 cascading deletes
그 다음 당신은 잘못하여 외래 키를 설정 한, 죽은 카테고리의 일원 이었기 때문에 제품을 핵무기. 예제 테이블이 주어지면 다음 테이블을 설정해야합니다 :
CREATE TABLE category (
id int unsigned not null primary key,
name VARCHAR(255) default null
)Engine=InnoDB;
CREATE TABLE product (
id int unsigned not null primary key,
name VARCHAR(255) default null
)Engine=InnoDB;
CREATE TABLE category_product (
category_id int unsigned not null,
product_id int unsigned not null,
PRIMARY KEY (category_id, product_id),
KEY pkey (product_id),
FOREIGN KEY (category_id) REFERENCES category (id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (product_id) REFERENCES product (id)
ON DELETE CASCADE
ON UPDATE CASCADE
)Engine=InnoDB;
좋아요,하지만 지금은 옵션 캐스케이드 외래 키를 사용하도록 테이블을 변경할 수있는 옵션이 없습니다. 다른 간단한 방법이 있습니까? 이것을 한 번 사용하여 정리하려면? – Iason
@lason 코드가 실패하고 조인 테이블에 값이 없으면 테이블에 조인 할 조건이 없습니다. 혼자 그 목적을 위해 당신은 캐스 캐 이드해야하고 이것은 대량 삭제 또는 대량 업데이트를 구현하는 데 매우 유용 할 것입니다. –
@Naresh에 대한 설명에 감사드립니다. 기회가 생기면 테이블을 바꿀 것입니다. – Iason