경우 컴퓨터 제조업체의 데이터베이스 보유 기계 및 액세서리 제품 정보. 전체 제품 정보를 유지 하는 데 사용 하는 테이블, PC 라고 하며 액세서리 공급의 정보를 유지 하는 데 사용 하는 테이블 부분 이라고.
PC 테이블 컴퓨터에 의해 사용 되는 CPU 모델을 설명 하는 필드와 우리 모든 Cpu의 모델 목록으로 생각할 수 있는 CPU의 모델을 설명 하는 부품 테이블에서 필드입니다.
물론,이 공장 생산 컴퓨터, 사용 CPU 공급 정보 테이블 (부품) 모델에 존재 해야 합니다. 이 경우 두 테이블-pc 테이블에서 CPU 모델 부품 테이블에는 모델에 의해 제약은 제약 조건 관계 (제약 조건) 있다.
먼저 우리는 부품 테이블을 만듭니다.
만들 테이블 (부품
... 필드 정의...,
모델 VARCHAR NULL이 아닌
... 필드 정의...
);
다음은 PC 테이블이입니다.
테이블 PC 만들기 (
... 필드 정의...,
Cpumodel VARCHAR NULL이
... 필드 정의...
};
인덱스 설정
외래 키를 설정 하려면 해당 두 개의 필드 (참조 테이블, PC 테이블) 참조 테이블에 있는 인덱스 (색인) 하며 테이블 (참조 되는 테이블, 부품 테이블)을 참조.
부품 테이블:
ALTER TABLE 부품 추가 인덱스 Idx_model (모델);
인덱스를 추가 부품 테이블에는 인덱스 기반 모델 필드, 케이블에 이름을 Idx_model 라고.
PC 테이블을 비슷한:
ALTER 테이블 pc 추가 인덱스 Idx_cpumodel (Cpumodel);
사실, 이러한 두 인덱스는 테이블을 만들 때 설정할 수 있습니다. 단지 그것의 필요성을 강조 하는 여기.
외래 키 정의
다음은 두 테이블 사이의 위에서 설명한 "제약 조건"입니다. 이후 PC의 CPU 모델 부품 테이블에서 해당 모델을 참조 해야 합니다, 우리는 PC 테이블의 Cpumodel 필드를 외국 설정 키 (외래 키), 키 즉, 참조 값은 다른 테이블에서.
ALTER 테이블 pc 추가 제약 조건 Fk_cpu_model
외래 키 (Cpumodel)
참조 부품 (모델);
PC 테이블에 대 한 외래 키, 외래 키의 이름을 Fk_cpu_model 라고 하는 첫 번째 줄, 두 번째 줄이 외래 키이 테이블에서 Cpumodel 필드를 설정 하 이며 세 번째 라인은 모델 필드 부품 테이블의 외래 키 제한 됩니다 말.
이 방법에서는, 우리의 외래 키가 이루어집니다! 우리가 부품 테이블에 존재 하지 않는 CPU 모델을 사용 하는 PC를 만들려고 하는 경우 MySQL 만들어지지 않도록 PC을 금지 됩니다.
캐스케이드 작업
다음 사항을 고려:
기술자 개월 전 부품 테이블 하나에 입력 된 Cpu 시리즈의 모델 한 편지, 잃 었 었 다 발견 하 고 이제 수정 해야 합니다. 우리는 참조 테이블의 열에 해당 부품 테이블에서 참조 되는 열이 변경 될 때 자동으로 수정 해야 할.
외래 키를 정의할 때 끝에 키워드를 추가 하면:
업데이트 캐스케이드;에
즉, 기본 테이블을 업데이트 하는 경우 (그들은) 체인을 생산 하는 자식 테이블 업데이트 작업, 그것은 어떤 사람들이 "계단식" 작업을 전화 처럼 보인다.
문장 전체에 면 그것은:
ALTER 테이블 pc 추가 제약 조건 Fk_cpu_model
외래 키 (Cpumodel)
참조 부품 (모델)
업데이트 캐스케이드;에
캐스케이드, 이외에 있다 (마스터 테이블 변경 방지) 제한, NULL 설정
텍스트 뿐만 아니라:
기본 테이블에서 레코드를 삭제, 삭제에 추가 해야 하는 경우 자식 테이블에 해당 레코드 삭제를 허용 하지 않는 경우를 제한 합니다. 완전 한 경우는 다음과 같습니다.
두 테이블, 국가 및 도시, COUNTRY_ID의 도시는 외래 키입니다.
테이블 생성 국가 (
country_id smallint 서명 하지 NULL auto_increment
국가 varchar NULL이
Last_update 타임 스탬프 NOT NULL,
기본 키 (COUNTRY_ID)
) 엔진 innodb 기본 Charset = utf8; =
표 시 (만들기
city_id smallint 서명 하지 NULL auto_increment
도시 varchar NULL이
country_id smallint 서명 되지 않은 NOT NULL,
Last_update 타임 스탬프 NOT NULL 기본 current_timestamp 업데이트 Curren_timestamp에
기본 키 (city_id)
키 idx_fk_country_id (country_id)
업데이트 캐스케이드에 제한 하는 제약 조건 fk_city_country 삭제에 외래 키 (country_id) 참조 국가 (country_id)
) 엔진 innodb 기본 Charset = utf8; =
외래 키 삭제:
외래 키 정의 삭제
--
외국인 정의 때 키 articles.member_id 외래 키 제약 조건 fk_member 보다 articles.category_id 절 보다?
이 fk_member는 다음과 같이 외래 키 정의 삭제 하는 데 사용 됩니다.
mysql > ALTER TABLE 기사 드롭 외래 키 fk_member;
검색어 좋아, 1 행의 영향을 (0.25 초)
레코드: 1 중복: 0 경고: 0
그러면 삭제 됩니다 ARTICLES.MEMBER_ID 외래 키 정의 하지만 정의 제약 Fk_symbol (즉, 외래 키 기호)를 지정 하지 않는 경우? 걱정 하지 마세요, 지정 하지 않으면, MySQL 자체, 다음 명령을 사용 하 여 볼 수 있는 하나 만듭니다:
Mysql > 보기 만들 테이블 기사;
+----+--+
| 테이블 | 테이블 만들기 |
+----+--+
| 기사 | CREATE TABLE '기사' (
'article_id' int (1) 서명 하지 NULL auto_increment
'category_id' tinyint (3) 서명 되지 않은 not NULL,
'member_id' int (1) 서명 되지 않은 not NULL,
'제목' varchar (255) NULL이 아닌
기본 키 (이 하 ' article_id'),
키 'category_id' ('category_id')
키 'member_id' ('member_id')
제약 'Articles_ibfk_1' 외래 키 ('category_id') 참조 '카테고리' (이 하 ' ID')
) 엔진 innodb 기본 charset = = latin1 |
+----+--+
1 행 집합 (0.01 초)
다음 명령을 실행 하 여 외래 키 정의 삭제할 수 있기 때문에 ARTICLES.CATEGORY_ID에 대 한 외래 키 기호는 articles_ibfk_1, 그를 볼 수 있습니다.
mysql > ALTER TABLE 기사 드롭 외래 키 articles_ibfk_1;
검색어 좋아, 1 행 (0.66 초)의 영향을
레코드: 1 중복: 0 경고: 0
6입니다. 요약
--
소개 하는 외래 키의 단점은 속도 성능, 감속 하 고 물론 외래 키의 장점은 많습니다.