외래키란 ?
데이터가 일관될 수 있도록 돕는 역할을 하며 보통은 두 개의 데이터베이스 테이블을 잇고자 기본 키와 함께 사용됩니다.
이에, 테이블끼리 연결하는 가상의 다리 역할을 하고 있습니다.
외래키 제약조건
부모 테이블의 특정한 값의 컬럼만 올 수 있도록 하는것이며 부모 테이블에서 참조하고 있는 컬럼의 값이 1, 2, 3, 4 밖에 없다면
외래키를 가지고 있는 컬럼도 1, 2, 3, 4 중에 선택해야만 들어갈 수 있습니다.
예시
VDSUSER 테이블과 VDSADMIN 테이블이 있다고 가정한다면,
👉 VDSUSER 테이블
- vdsDomain
- vdUserID (기본키)
👉VDSADMIN 테이블
- vdsDomain
- vdsUserID (외래키, VDSUSER 테이블의 vdsDomain 및 vdsUserID를 참조)
이렇게 VDSADMIN 테이블에서 vdsUserID는 VDSUSER 테이블의 vdsUserID를 참조하는 외래키 이며
이 관계는 vdsUserID가 VDSUSER 테이블에 있는 값이어야만 VDSADMIN 테이블에 존재할 수 있다는 것을 의미합니다.
SQL Error [1451] [23000] 오류란?
해당 오류는 외래키 제약 조건위반 이므로 앞서 말한 예시로 설명을 하자면
VDSUSER 테이블에서 레코드를 삭제하려고 시도할 때, 그 레코드가 VDSADMIN 테이블에서 참조되고 있기 때문에
외래키 제약 조건에 의해 참조된 레코드가 존재하는 상태에서는 부모 테이블 VDSUSER 의 레코드를 삭제 할 수 없다는 오류 입니다.
해결방법
① 참조된 레코드 삭제
먼저 자식 테이블 VDSADMIN에서 부모 테이블 VDSUSER의 레코드를 참조하고 있는 모든 레코드를 삭제합니다.
② 부모 테이블 레코드 삭제
부모 테이블 VDSUSER의 레코를 삭제
정리하자면 외래키 제약 조건은 데이터베이스 내의 참조 무결성을 보장하며 데이터의 일관성을 유지하는 중요한 기능입니다.
그러나 삭제 또는 업데이트 작업 시에는 이러한 제약 조건으로 인해 오류가 발생할 수 있으며,
이 경우 참조된 데이터를 먼저 처리 해야 합니다.