우리는 외래 키가있는 테이블이 여러 개 있습니다. 나는 그들의 CREATE 문을 검사했고, 아무 곳에 나 활성화 된 'ON DELET CASCADE'옵션이 없었다.MySQL - 삭제 캐스케이드
학부모의 행 삭제 중 일부 명령을 제공하여 상위 항목과 하위의 모든 관련 행을 삭제할 수 있는지 여부를 확인하고 싶습니다.
가능합니까?
우리는 외래 키가있는 테이블이 여러 개 있습니다. 나는 그들의 CREATE 문을 검사했고, 아무 곳에 나 활성화 된 'ON DELET CASCADE'옵션이 없었다.MySQL - 삭제 캐스케이드
학부모의 행 삭제 중 일부 명령을 제공하여 상위 항목과 하위의 모든 관련 행을 삭제할 수 있는지 여부를 확인하고 싶습니다.
가능합니까?
테이블에 ON DELETE CASCADE가없는 경우 AFTER DELETE 트리거를 사용하여 구현할 수 있습니다.
그렇지 않으면 ON DELETE CASCADE를 쉽게 정의 할 수 있습니다. 그러나 특히 자식 테이블에 여러 제약 조건이있는 경우주의하십시오.
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;
답장을 보내 주셔서 감사합니다. 미안하지만, 확실하지 않은 경우. 사실,이 'ON DELETE CASCADE'는 테이블을 만드는 동안 사용되지 않았습니다. 삭제 쿼리를 추가하여 어떤 방법으로 캐스케이드 옵션을 사용할 수 있습니까? – Firefox
@firefox 제약 조건을 변경할 수 있습니까? 롤란도의 방아쇠에 대한 대답은 어떨까요? –
그래, 알았다. 비록 내가 제약 조건을 바꿀 수는 없지만 그것을 어떻게 할 수 있는지 이해했다. 고마워. – Firefox