2009-06-22 2 views
46

MySQL docs을 구문 분석하려고합니다. 그들은 더 명확해질 수 있습니다. 그들은 SET NULL, NO ACTION, RESTRICT, CASCADE 및 SET DEFAULT의 다섯 가지 가능성이 있다고 말합니다.MySQL의 기본 ON DELETE 동작은 무엇입니까?

NO ACTION 및 RESTRICT는 동일한 작업을 수행하며 (FK를 깨는 DB 변경을 막음) 기본값이므로 ON DELETE 절을 생략하면 NO ACTION (또는 RESTRICT - 동일한 것) .

SET NULL은 상위 행 삭제를 허용하고 FK를 NULL로 설정합니다.

CASCADE는 하위 행을 삭제합니다.

SET DEFAULT는 절대로 사용하지 마십시오.

다소 차이가 있습니까?

+0

CASCADE 옵션 – jitter

+0

을 놓쳤으며 올바르게 이해했습니다. MYSQL에서 FK 제약 조건에 대한 참조 옵션을 지정하지 않는 것은 ON DELETE RESTRICT를 말하는 것과 같습니다. – jitter

+2

MySQL에서는 단지 ACTION과 RESTRICT가 같은 것으로 간주됩니다. 내 행동이 끝나면 FK 제약 조건을 위반하지 않으면 이론적으로 참조 된 부모를 삭제/변경할 수 없으므로 다른 DB에서는 사실이 아닙니다. – jitter

답변

57

예, 그것은 올바른 :

NO ACTION는 [...] 이노 은 부모 테이블에 대한 삭제 또는 업데이트 작업 을 거부하지 않습니다.

RESTRICT : 부모 테이블에 대해 작업 삭제 또는 업데이트를 거부합니다. RESTRICT (또는 NO ACTION)을 지정하면 ON DELETE 또는 ON UPDATE 절을 생략하는 것과 동일한 입니다. [...]

분명히 NO ACTIONRESTRICT은 동의어입니다. 또한 ON DELETE/UPDATE 절이 없을 때마다 사용되므로 기본 동작입니다.

SET NULL의 : 삭제 또는 부모 테이블에서 행을 업데이트하고 NULL로 자식 테이블에서 외래 키 열 또는 열을 설정합니다. [...]

외부 열은 NOT NULL로 선언되지 않으면 (또는 InnoDB가 삭제 또는 업데이트를 허용하지 않는 경우) NULL로 설정됩니다.

CASCADE : 삭제 또는 부모 테이블에서 행을 업데이트하고 자동으로 자식 테이블에 일치하는 행을 삭제하거나 업데이트합니다. [...]

캐스케이드 삭제 (또는 갱신) 외부 컬럼.

SET의 DEFAULT :이 작업은 파서에 의해 인식되고 있지만, InnoDB하지만 DELETE SET의 DEFAULT 또는 ON 업데이트 기본값 설정 조항 ON 포함 테이블 정의를 거부합니다.

기본적으로이 옵션을 사용할 수 없습니다.