• MySQL매뉴얼
    • MySQL 5.6 매뉴얼
    • MySQL 5.1 매뉴얼
    • MySQL 5.0 매뉴얼
    • MySQL HA 매뉴얼
  • 기술문서
    • Xtrabackup 구성
    • 메모리 사용량 모니터링
  • 라이선스
  • 온라인문의
  • 회사소개
  • → 목 록 (MySQL5.6 한글메뉴얼) [close]
  • 1. MySQL 5.6 새로운 기능
  • 2. MySQL 설치 및 업그레이드
  • 3. MySQL Tutorial
  • 4. MySQL 프로그램
  • 5. MySQL 서버관리
  • 6. 보안
  • 7. 백업 및 복구
  • 8. 최적화
  • 9. Language Structure(언어구조)
  • 10. Character Sets(Globalization)
  • 11. 데이터형(Data Types)
  • 12. 함수와 연산자
  • 13. SQL 문법
  • 14. InnoDB 스토리지 엔진
  • 1. InnoDB 소개
    2. InnoDB의 개념과 아키텍처
    3. InnoDB 구성
    4. InnoDB 관리
    5. InnoDB 테이블 스페이스 관리
    6. InnoDB 테이블 관리
    1. InnoDB 테이블 만들기
    2. 다른 컴퓨터에 InnoDB 테이블의 이동 또는 복사
    3. 트랜잭션을 사용하여 DML 작업 그룹화
    4. MyISAM에서 InnoDB의 테이블 변환
    5. InnoDB에서 AUTO_INCREMENT 처리
    6. InnoDB 및 FOREIGN KEY 제약
    7. InnoDB 테이블에서의 제한
    7. InnoDB 압축 테이블
    8. InnoDB 파일 형식 관리
    9. InnoDB Row Storage and Row Formats
    10. InnoDB 디스크 I/O 및 파일 영역 관리
    11. InnoDB와 온라인 DDL
    12. InnoDB 부팅 옵션 및 시스템 변수
    13. InnoDB의 성능
    14. InnoDB INFORMATION_SCHEMA 테이블
    15. InnoDB 모니터
    16. InnoDB 백업 및 복구
    17. InnoDB와 MySQL 복제
    18. InnoDB 및 memcached의 통합
    19. InnoDB 문제 해결
  • 15. 기타 스토리지 엔진
  • 16. 고가용성 및 확장성
  • 17. 리플리케이션
  • 18. MySQL Cluster
  • 19. 파티셔닝
  • 20. Stored Programs and Views
  • 21. INFORMATION_SCHEMA
  • 22. PERFORMANCE SCHEMA
  • 23. 컨넥터 및 API
  • 24. MySQL 확장
  • 25. MySQL Enterprise Edition
  • 26. MySQL Workbench
  • 27. 제약 및 제한
  • 28. MySQL 5.7 새로운 기능

14.6.6 InnoDB 및 FOREIGN KEY 제약

이 섹션에서는 InnoDB 스토리지 엔진의 외부 키 처리와 MySQL 서버에서의 처리와 비교했을 때의 차이점에 대해 설명합니다.

외부 키 정의

InnoDB 테이블의 외부 키 정의는 다음과 같은 조건이 적용됩니다.

  • InnoDB 는 외래 키가 어떤 인덱스 컬럼 또는 컬럼의 그룹을 참조하는 것이 허가됩니다. 그러나 참조되는 테이블은 참조되는 컬럼이 동일한 순서로 첫 번째 컬럼으로 나열되어있는 인덱스가 존재해야합니다.

  • 현재 InnoDB 는 사용자 정의 파티션이있는 테이블의 외부 키가 지원되지 않습니다. 즉, 사용자가 파티션 된 InnoDB 테이블에 외래 키가 참조하는 외래 키 참조 또는 컬럼이 포함될 가능성이 없습니다.

  • InnoDB 는 외래 키 제약 조건이 고유하지 않은 키를 참조하는 것이 허용됩니다. 이것은 표준 SQL의 InnoDB 확장입니다.

참조 액션

InnoDB 테이블의 외부 키에 대한 참조 작업은 다음과 같은 조건이 적용됩니다.

  • SET DEFAULT 는 MySQL 서버에서 허용되어 있지만, InnoDB 는 무효로 거부됩니다. 이 어구를 사용하여 CREATE TABLE 및 ALTER TABLE 문은 InnoDB 테이블에서 허용되지 않습니다.

  • 동일한 참조 키 값을 가진 여러 행이 부모 테이블에있는 경우, InnoDB 는 동일한 키 값을 가진 다른 부모 행이 존재하지 않는 것처럼 외부 키 체크로 작동합니다. 예를 들어, RESTRICT 형식 제약 조건이 정의되어 여러 부모 행을 포함하는 자식 행이 존재하는 경우에는 이러한 부모의 라인 중 하나를 제거 할 수 InnoDB 에서 허용되지 않습니다.

  • InnoDB 는 외래 키 제약 조건에 대응하는 인덱스의 레코드에 따라 깊이 우선 알고리즘을 사용하여 계단식 작업이 수행됩니다.

  • ON UPDATE CASCADE 또는 ON UPDATE SET NULL 은 계단식 중에 이전에 업데이트하고 동일한 테이블을 업데이트하도록 재귀 경우 RESTRICT 처럼 작동합니다. 즉, 자기 참조 형 ON UPDATE CASCADE 또는 ON UPDATE SET NULL 작업은 사용할 수 없습니다. 이 목적은 계단식 업데이트에서 발생하는 무한 루프를 방지하는 것입니다. 반대로, 자체 참조 ON DELETE SET NULL 은 자체 참조 ON DELETE CASCADE 처럼 작동 할 수 있습니다. 케스케이드는 15 수준보다 깊게 중첩 될 수 없습니다.

  • 일반적인 MySQL과 마찬가지로 다수의 행을 삽입, 삭제 또는 업데이트하는 SQL 문은 InnoDB 에 의해 UNIQUE 및 FOREIGN KEY 제약이 한줄 씩 체크됩니다. 외부 키 체크를 실행할 때, InnoDB 는 조사 대상의 자식 또는 부모 레코드에 공유 행 레벨 락을 설정합니다. InnoDB 는 즉시 외부 키 제약 조건을 검사하고 그 검사는 트랜잭션의 커밋까지 지연되지 않습니다. SQL 표준에 따르면, 기본 동작은 지연 검사해야합니다. 즉, 전체 SQL 문이 처리 된 후에 비로소 제약 조건을 검사합니다. InnoDB 에서 제약 지연 확인이 구현 될 때까지 외부 키를 사용하여 그 자체를 참조하는 레코드를 삭제하는 등의 일부 작업을 수행 할 수 없습니다.

외부 키 사용법 및 오류 정보

외부 키와 그 사용법에 대한 일반적인 정보는 INFORMATION_SCHEMA.KEY_COLUMN_USAGE 테이블에서 쿼리를 실행하여 얻을 수 있습니다. InnoDB 테이블에 관련된 자세한 정보는 INNODB_SYS_FOREIGN 및 INNODB_SYS_FOREIGN_COLS 테이블 또는 INFORMATION_SCHEMA 데이터베이스에서 찾을 수 있습니다. 섹션 13.1.17.2 "외래 키 제약 조건 사용" 을 참조하십시오.

SHOW ERRORS 이외에도 InnoDB 테이블이 참여하는 외부 키 오류 (일반적으로 MySQL 서버에서는 오류 150)가 발생할 때, SHOW ENGINE INNODB STATUS 의 출력을 확인하는 것으로, 최근의 InnoDB 외부 키 오류에 대한 자세한 설명을 얻을 수 있습니다.


서울시 강남구 영동대로 602 6층
TEL: 02-6061-0006  /  E: csr@mysqlkorea.com
주식회사 이노클러스터  등록번호 : 727-86-02261
Copyright © innocluster Co. ltd. all rights reserved