2011-02-17 4 views
1

우리는 외래 키가있는 테이블이 여러 개 있습니다. 나는 그들의 CREATE 문을 검사했고, 아무 곳에 나 활성화 된 'ON DELET CASCADE'옵션이 없었다.MySQL - 삭제 캐스케이드

학부모의 행 삭제 중 일부 명령을 제공하여 상위 항목과 하위의 모든 관련 행을 삭제할 수 있는지 여부를 확인하고 싶습니다.

가능합니까?

답변

0

테이블에 ON DELETE CASCADE가없는 경우 AFTER DELETE 트리거를 사용하여 구현할 수 있습니다.

그렇지 않으면 ON DELETE CASCADE를 쉽게 정의 할 수 있습니다. 그러나 특히 자식 테이블에 여러 제약 조건이있는 경우주의하십시오.

0

It is a valid option 아래 코드는 예상대로 작동합니다.

DROP TABLE IF EXISTS TestFoo; 
CREATE TABLE TestFoo 
(
    Foo INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(Foo) 
) ENGINE=InnoDB; 
DROP TABLE IF EXISTS TestBar; 
CREATE TABLE TestBar 
(
    Bar INT NOT NULL AUTO_INCREMENT, 
    Foo INT, 
    PRIMARY KEY(Bar), 
    FOREIGN KEY bar_foo (Foo) 
     REFERENCES TestFoo (Foo) 
     ON DELETE CASCADE 
) ENGINE=InnoDB; 

INSERT TestFoo VALUES (NULL),(NULL),(NULL),(NULL); 
INSERT TestBar(Foo) VALUES (1),(2),(3),(4); 
SELECT * FROM TestBar; 
DELETE FROM TestFoo WHERE Foo = 2 OR Foo = 3; 
SELECT * FROM TestBar; 
+0

답장을 보내 주셔서 감사합니다. 미안하지만, 확실하지 않은 경우. 사실,이 'ON DELETE CASCADE'는 테이블을 만드는 동안 사용되지 않았습니다. 삭제 쿼리를 추가하여 어떤 방법으로 캐스케이드 옵션을 사용할 수 있습니까? – Firefox

+0

@firefox 제약 조건을 변경할 수 있습니까? 롤란도의 방아쇠에 대한 대답은 어떨까요? –

+0

그래, 알았다. 비록 내가 제약 조건을 바꿀 수는 없지만 그것을 어떻게 할 수 있는지 이해했다. 고마워. – Firefox