MySQL 외래 키 제약 조건을 사용하는 방법

How Use Mysql Foreign Key Constraints



외래 키 제약 조건은 MySQL 데이터베이스의 두 테이블 간의 관계를 만드는 데 사용됩니다. 관련 테이블에 대해 다양한 유형의 제한을 설정하는 것은 MySQL의 매우 중요한 기능입니다. 테이블에 대한 외래 키 제약 조건을 정의하려면 다른 테이블의 기본 키를 사용해야 합니다. 기본 키는 테이블의 특정 행을 식별하기 위한 테이블의 고유 키이며 이 기본 키가 일대일 또는 일대다 또는 다대다 관계를 만들기 위해 다른 테이블에 사용될 때 외래 키라고 합니다. 외래 키의 기능과 이러한 키가 MySQL 테이블에서 사용되는 방법이 이 기사에 나와 있습니다.

외래 키 제약 조건의 기능:

외래 키 제약 조건의 몇 가지 중요한 기능은 아래에 설명되어 있습니다.







  • 자식 테이블에서 사용하는 외래 키의 데이터 형식은 부모 테이블에서 외래 키를 참조하기 위해 사용하는 기본 키의 데이터 형식과 같아야 합니다.
  • 모든 인덱스 열 또는 여러 열은 InnoDB 테이블에 대해서만 외래 키로 참조될 수 있습니다.
  • 참조 권한 또는 SELECT, INSERT, UPDATE 및 DELETE 문의 권한 중 하나 이상이 외래 키를 생성하는 데 필요합니다.
  • 외래 키는 두 가지 방법으로 생성할 수 있습니다. 하나는 CREATE 문을 사용하고 다른 하나는 ALTER 문을 사용합니다.

전제 조건:

외래 키 제약 조건을 생성하기 전에 기본 키로 데이터베이스와 부모 테이블을 생성해야 합니다. 데이터베이스 이름이 ' 도서관 ' 및 '라는 두 개의 상위 테이블이 포함되어 있습니다. 서적 ' 그리고 ' 빌어 쓰는 사람 '. 다음을 사용하여 MySQL 서버에 연결하십시오. mysql 클라이언트를 실행하고 다음 SQL 문을 실행하여 데이터베이스와 테이블을 생성합니다.



창조하다 데이터 베이스 도서관;
사용하다 도서관;

창조하다 테이블 서적(
ID 지능 아니다 없는 자동 증가 ,
제목 바르차르 (오십) 아니다 없는 ,
작가 바르차르 (오십) 아니다 없는 ,
발행자 바르차르 (오십) 아니다 없는 ,
기본 키 (ID)
) 엔진 = 이노디비 ;

창조하다 테이블 차용인(
ID 바르차르 (오십) 아니다 없는 ,
이름 바르차르 (오십) 아니다 없는 ,
주소 바르차르 (오십) 아니다 없는 ,
이메일 바르차르 (오십) 아니다 없는 ,
기본 키 (ID)
) 엔진 = 이노디비 ;



CREATE 문을 사용하여 외래 키 제약 조건 정의

'라는 이름의 테이블을 생성합니다. book_borrow_info ' 다음 문을 실행하여 외래 키 제약 조건을 사용합니다. 여기서, book_id 필드는 외래 키 이 테이블에 대해 이 필드의 모든 값은 ID 분야의 서적 테이블. 서적 부모 테이블이고 book_borrow_info 자식 테이블이다. 여기에서도 외래 키로 두 가지 제한이 설정됩니다. 이것들은 캐스케이드 삭제 그리고 업데이트 캐스케이드 . 즉, 기본 키가 부모 테이블에서 제거되거나 업데이트되면 외래 키와 관련된 자식 테이블과 관련된 해당 레코드가 제거되거나 외래 키가 업데이트됩니다.





창조하다 테이블 book_borrow_info(
차용 ID 바르차르 (오십),
book_id 지능 ,
차용일 데이트 아니다 없는 ,
반환 기일 데이트 아니다 없는 ,
상태 바르차르 (열 다섯) 아니다 없는 ,
인덱스 par_ind(book_id),
기본 키 (차용 ID,차용일),
외래 키 (book_id) 참조 서적(ID)
삭제 종속
업데이트 종속
) 엔진 = 이노디비 ;

이제 다음 SQL 문을 실행하여 두 테이블에 일부 레코드를 삽입합니다. 첫 번째 INSERT 문은 4개의 레코드를 서적 테이블. 의 4가지 가치 ID 분야의 서적 테이블은 자동 증가 속성에 대해 1, 2, 3 및 4가 됩니다. 두 번째 INSERT 문은 4개의 레코드를 book_borrow_info 를 기반으로 ID 가치 서적 테이블.



끼워 넣다 안으로 서적 가치
( 없는 , '앵무새 죽이기', '하퍼 리', '그랜드 센트럴 퍼블리싱'),
( 없는 , '백년의 고독', 가르시아 마르케스, '루트피 오즈콕'),
( 없는 , '인도로 가는 길', '포스터, E.M.', 'BBC 헐턴 그림 라이브러리'),
( 없는 , '투명 인간', '랄프 엘리슨', '브리태니커 백과사전');

끼워 넣다 안으로 book_borrow_info 가치
('123490', 1, '2020-02-15', '2020-02-25', '돌아왔다'),
('157643', 2, '2020-03-31', '2020-03-10', '보류 중'),
('174562', 4, '2020-04-04', '2020-04-24', '빌린'),
('146788', , '2020-04-10', '2020-01-20', '빌린');

부모 테이블의 기본 키 필드에 존재하지 않는 자식 테이블의 외래 키 필드에 값을 삽입하려고 하면 MySQL은 오류를 생성합니다. 다음 SQL 문은 상위 테이블 때문에 오류를 생성합니다. 서적 id 값을 포함하지 않음 10 .

끼워 넣다 안으로 book_borrow_info 가치
('195684', 10, '2020-04-15', '2020-04-30', '돌아왔다');

다음 DELETE 문을 실행한 후 네 번째 레코드가 파일에서 제거될 때 서적 테이블 다음 관련 레코드 book_borrow_info 외래 키 제약 조건에 대해 테이블이 자동으로 제거됩니다.

삭제 에서 서적 어디 ID= 4;
선택하다 * ~에서 서적;
선택하다 * ~에서 book_borrow_info;

ALTER 문을 사용하여 외래 키 제약 조건 정의

처음에는 일부 레코드를 차용인 테이블이고 이 테이블은 다음에서 상위 테이블로 정의됩니다. 나이 성명.

끼워 넣다 안으로 차용인 가치
('123490', '패트릭 우드', '34 웨스트 스트리트 LANCASTER LA14 9ZH', ' [이메일 보호됨] '),
('157643', '에즈라 마틴', '10 더 그로브 버밍엄 B98 1EU', ' [이메일 보호됨] '),
('174562', '존 이네스 아치', '55 Main Road 리버풀 L2 3OD', ' [이메일 보호됨] '),
('146788', '프레드릭 핸슨', '85 하이필드 로드 SHREWSBURY SY46 3ME', ' [이메일 보호됨] ');

다음을 실행 나이 다른 외래 키 제약 조건을 설정하는 문 book_borrow_info 관계를 맺는 테이블 차용인 테이블. 여기, 차용 ID 에 대한 외래 키로 정의됩니다. book_borrow_info 테이블.

ALTER TABLE book_borrow_info 추가 제약 조건 fk_borrower
외래 키(차용 ID)참조 차용인(ID)ON DELETE CASCADE ON UPDATE RESTRICT;

이제 레코드를 삽입하십시오. book_borrow_info 유효한 차용 ID 에 존재하는 값 ID 분야의 차용인 테이블. 157643 값이 차용자 테이블에 존재하며 다음 INSERT 문이 성공적으로 실행됩니다.

끼워 넣다 안으로 book_borrow_info 가치
('157643', 1, '2020-03-10', '2020-03-20', '돌아왔다');

다음 INSERT 문은 id 값이 195680 차용자 테이블에 존재하지 않습니다.

끼워 넣다 안으로 book_borrow_info 가치
('195680', 1, '2020-04-15', '2020-04-30', '돌아왔다');

결론:

외래 키 제약 조건을 적절하게 정의하는 것은 관계형 데이터베이스를 생성하고 테이블 간의 데이터를 적절하게 관리하기 위한 매우 중요한 작업입니다. 외래 키 제약 조건의 사용을 아는 것은 데이터베이스 디자이너에게 매우 중요합니다. 이 기사가 새로운 데이터베이스 설계자가 외래 키 제약 조건의 개념을 이해하고 작업에 적절하게 적용하는 데 도움이 되기를 바랍니다.