오늘 테이블을 디자인하기 위해 Navicat for mysql을 사용했을 때 외래 키를 설정할 때 삭제 및 업데이트 시 두 열에서 선택할 수 있는 값이 CASCADE, NO ACTION, RESTRICT, SET NULL 4가지가 있었습니다. 모두 직접 시도해 보았는데 차이점은 다음과 같습니다.
CASCADE: 상위 테이블이 삭제되고 업데이트되면 하위 테이블이 관련 레코드를 삭제하고 업데이트합니다.
SET NULL: 상위 테이블이 삭제될 때; 업데이트하면 하위 테이블은 관련 레코드를 삭제하고 업데이트합니다. 레코드의 외래 키 필드 열은 null로 설정되어 있으므로 하위 테이블을 설계할 때 외래 키를 null이 아닌 값으로 설정할 수 없습니다. RESTRICT(제한)는 상위 테이블 레코드 삭제를 방지합니다
NO ACTION: RESTRICT와 동일하지만 외래 키도 먼저 확인합니다.
Empty, RESTRICT , NO ACTION
Delete: 슬레이브 테이블의 레코드가 존재하지 않는 경우에만 메인 테이블을 삭제할 수 있으며, 슬레이브 테이블을 삭제하면 마스터 테이블은 변경되지 않습니다. 업데이트: 슬레이브 테이블 기록이 존재하지 않는 경우 메인 테이블 메뉴를 업데이트할 수 있습니다. 슬레이브 테이블이 업데이트되면 메인 테이블은 변경되지 않습니다. |
CASCADE |
삭제: 마스터 테이블 삭제 시 슬레이브 테이블을 자동으로 삭제합니다. 마스터 테이블은 그대로 두고 슬레이브 테이블을 삭제합니다. 업데이트: 마스터 테이블을 업데이트할 때 슬레이브 테이블을 자동으로 업데이트합니다. 마스터 테이블을 변경하지 않고 슬레이브 테이블을 업데이트합니다. |
SET NULL |
Delete: 마스터 테이블 삭제 시 슬레이브 테이블을 NULL로 자동 업데이트합니다. 슬레이브 테이블을 삭제하면 마스터 테이블은 그대로 유지됩니다. 업데이트: 마스터 테이블을 업데이트할 때 슬레이브 테이블 값을 NULL로 자동 업데이트합니다. 마스터 테이블을 변경하지 않고 슬레이브 테이블을 업데이트합니다. |
| 이해를 돕기 위해 간단한 예를 들어보겠습니다.
(1) 데이터베이스 서점에서 다음과 같이 새 테이블 a를 생성했습니다.
외래 키 설정:
(2) 데이터베이스 서점에서 다음과 같이 새 테이블 b를 만들었습니다.
(3) 다음과 같이 테이블 a와 b에 레코드를 삽입합니다.
여기: 테이블 a의 id2 필드는 외국입니다. 키 필드는 테이블 b의 기본 키를 참조하므로 테이블 b는 상위 테이블이고 테이블 a는 하위 테이블입니다. 그런 다음 테이블 a의 외래 키를 설정할 때 네 가지 다른 값을 설정하면 위에서 언급한 결론을 도출할 수 있습니다. .
위 내용은 MySQL 외래 키 설정에서 CASCADE, NO ACTION, RESTRICT 및 SET NULL은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!