1. 외래 키란 무엇인가요?
기본 키: 레코드를 고유하게 식별하며, 반복할 수 없고 비워둘 수 없습니다.
외래 키 : 예 다른 테이블의 기본 키와 외래 키는 중복되거나 null 값을 가질 수 있으며 다른 테이블과의 관계를 설정하는 데 사용됩니다. 따라서 외래 키에 관해 이야기하려면 최소한 두 개의 테이블이 포함되어야 합니다. 예를 들어, 다음 두 테이블은 다음과 같습니다.
위에는 부서 테이블(dept)과 직원 테이블(emp)이라는 두 테이블이 있습니다. Id=Dept_id, Dept_id는 직원 테이블의 외래 키입니다. 직원 테이블의 직원은 자신이 어느 부서에 속해 있는지 알아야 하므로 외래 키 Dept_id를 통해 해당 부서를 찾을 수 있으며, 이후 테이블에서 다양한 필드 정보를 찾을 수 있습니다. 부서 테이블입니다. 따라서 둘은 서로 관련됩니다. 따라서 마스터 테이블과의 연결을 찾기 위해서는 슬레이브 테이블에 외래 키를 생성해야 하며, 슬레이브 테이블은 둘 사이의 관계를 유지하는 역할을 합니다.
2. 외래 키 사용은 다음 조건을 충족해야 합니다. (여기에는 InnoDB의 개념이 포함됩니다.)
1. 두 테이블 모두 InnoDB 테이블이어야 하며, 임시 테이블이 없습니다. .
참고: InnoDB는 데이터베이스의 엔진입니다. 두 가지 일반적인 MySQL 엔진이 있습니다: InnoDB와 MyISAM. MyISAM은 외래 키를 지원하지 않습니다.
2. 외래 키 관계를 설정하는 해당 열은 유사한 InnoDB 내부 데이터 유형을 가져야 합니다.
3. 외래키 관계를 설정하기 위해 해당 컬럼을 Indexing 해야 합니다.
4. CONSTRAINT 기호가 명시적으로 제공되는 경우 해당 기호는 데이터베이스에서 고유해야 합니다. 명시적으로 지정하지 않으면 InnoDB가 자동으로 생성됩니다.
인터뷰 질문: 귀하의 데이터베이스는 어떤 스토리지 엔진을 사용합니까? 차이점은 무엇입니까?
답변: 일반적인 것은 MyISAM과 InnoDB입니다.
MyISAM: 외래 키 제약 조건은 지원되지 않습니다. 거래는 지원되지 않습니다. 대규모 배치로 데이터를 가져올 경우 데이터를 삽입하는 동안 인덱스가 생성되므로 실행 효율성을 높이기 위해서는 먼저 인덱스를 비활성화한 다음 가져오기가 완료된 후 인덱스를 활성화해야 합니다.
InnoDB: 외래 키 제약 조건 및 트랜잭션을 지원합니다. 인덱스는 인덱스를 참조하지 않고 별도로 처리됩니다.
CONSTRAINT 기호: 이 외래 키 제약 조건에 이름을 지정하면 나중에 찾기가 매우 편리합니다. 이 매개변수를 추가하지 않으면 시스템이 자동으로 이름을 할당합니다.
FOREIGN KEY: 표의 필드 1을 외래 키 필드로 사용합니다.
참조: 기본 테이블의 필드 2에 매핑됩니다.
ON DELETE 뒤의 4개 매개변수: 메인 테이블에서 레코드를 삭제할 때 이루어진 합의를 나타냅니다.
RESTRICT(제한): 삭제하려는 마스터 테이블에 하위 슬레이브 테이블에 해당하는 레코드가 있는 경우 해당 마스터 테이블은 삭제되지 않습니다.
CASCADE: 메인 테이블의 레코드가 삭제되면 슬레이브 테이블의 관련 레코드도 모두 삭제됩니다.
SET NULL: 외래 키를 null로 설정합니다.
조치 없음: 아무것도 하지 않습니다.
참고: 일반적으로 RESTRICT와 CASCADE가 가장 많이 사용됩니다.
아름다운 글과 그림
위 내용은 MySQL Advanced(1) Primary Key와 Foreign Keys, more 관련 내용은 PHP 중국어 홈페이지(www.php.cn)를 참고해주세요!