logo

DBMS의 참조 무결성 제약 조건

참조 무결성 제약 조건은 다음과 같이 알려져 있습니다. 외래 키 제약 조건 . 외래 키는 다른 테이블의 기본 키에서 값이 파생되는 키입니다.

값이 파생되는 테이블은 다음과 같습니다. 마스터 또는 참조 테이블과 그에 따라 값이 삽입되는 테이블을 하위 또는 참조 테이블, 즉, 다음을 포함하는 테이블이라고 할 수 있습니다. 외래 키 이라고 불린다 어린이 테이블 , 그리고 다음을 포함하는 테이블 기본 키/후보 키 이라고 불린다 참조 테이블 또는 상위 테이블 . 데이터베이스 관계형 모델에 대해 이야기할 때 후보 키는 0개 이상의 속성을 가질 수 있는 속성 집합으로 정의될 수 있습니다.

마스터 테이블 또는 참조 테이블의 구문은 다음과 같습니다.

 CREATE TABLE Student (Roll int PRIMARY KEY, Name varchar(25) , Course varchar(10) ); 

여기서 Roll 열은 다음과 같이 작동합니다. 기본 키, 이는 하위 테이블의 외래 키 값을 파생하는 데 도움이 됩니다.

참조 무결성 제약조건

하위 테이블 또는 참조 테이블의 구문은 다음과 같습니다.

알파벳과 숫자
 CREATE TABLE Subject (Roll int references Student, SubCode int, SubName varchar(10) ); 

참조 무결성 제약

위 표에서 Roll 열은 다음과 같은 역할을 합니다. 외래 키, 그 값은 마스터 테이블의 기본 키의 Roll 값을 사용하여 파생됩니다.

외래 키 제약 조건 또는 참조 무결성 제약 조건.

참조 무결성 제약 조건에는 두 가지가 있습니다.

삽입 제약조건: MASTER 테이블에 값이 없으면 CHILD 테이블에 값을 삽입할 수 없습니다.

제약조건 삭제: 값이 CHILD 테이블에 있으면 MASTER 테이블에서 값을 삭제할 수 없습니다.

SUBJECT 테이블의 다른 열 값과 함께 Roll = 05를 삽입하려고 한다고 가정하면 즉시 '오류가 표시됩니다. 외래 키 제약 조건 위반 ' 즉, 삽입 명령을 다음과 같이 실행할 때:

종교 목록

SUBJECT 값(5, 786, OS)에 삽입합니다. 삽입 제약으로 인해 SQL에서는 지원되지 않습니다. ( 마스터 테이블에 값이 없으면 자식 테이블에 값을 삽입할 수 없으므로 마스터 테이블에는 Roll = 5가 없으므로 자식 테이블에는 Roll = 5를 입력할 수 없습니다.)

마찬가지로 STUDENT 테이블에서 Roll = 4를 삭제하려는 경우 즉시 '오류가 표시됩니다. 외래 키 제약 조건 위반 ' 즉, 삭제 명령을 다음과 같이 실행할 때:

Roll = 4인 STUDENT에서 삭제합니다. 삭제 제약 조건으로 인해 SQL에서는 지원되지 않습니다. ( 값이 하위 테이블에 있는 경우 마스터 테이블에서 값을 삭제할 수 없으므로 Roll = 5가 하위 테이블에 있으므로 마스터 테이블에서 Roll = 5를 삭제할 수 없습니다. 어떻게든 Roll = 5를 삭제하면 Roll = 5가 하위 테이블에서 사용 가능해지며 결국 삽입 제약 조건을 위반하게 됩니다.

캐스케이드 삭제 시.

삭제 제약 조건에 따라: 값이 CHILD 테이블에 있는 경우 MASTER 테이블에서 값을 삭제할 수 없습니다. 다음 질문은 삭제 제약 조건을 위반하지 않고 값이 하위 테이블에 있는 경우 마스터 테이블에서 값을 삭제할 수 있습니까? 즉, 마스터 테이블에서 값을 삭제하는 순간 이에 해당하는 값도 하위 테이블에서도 삭제되어야 합니다.

위 질문에 대한 대답은 '예'입니다. 값이 삭제 제약 조건을 위반하지 않고 하위 테이블에 있는 경우 마스터 테이블에서 값을 삭제할 수 있습니다. 하위 테이블을 생성하는 동안 약간의 수정을 수행해야 합니다. 계단식 삭제 시 .

테이블 구문

nfa에서 dfa로
 CREATE TABLE Subject (Roll int references Student on delete cascade, SubCode int, SubName varchar(10) ); 

위 구문에서 참조 키워드(외래 키 생성에 사용됨) 바로 뒤에 계단식 삭제를 추가했습니다. 이제 이를 추가하면 삭제 위반 없이 하위 테이블에 값이 있는 경우 마스터 테이블에서 값을 삭제할 수 있습니다. 강제. 이제 자식 테이블에 Roll = 5가 있음에도 불구하고 마스터 테이블에서 Roll = 5를 삭제하고 싶다면, 마스터 테이블에서 Roll = 5를 삭제하라는 명령을 내리는 순간 Roll = 5인 행이 삭제되기 때문에 가능합니다. 하위 테이블의 5도 삭제됩니다.

참조 무결성 제약조건
참조 무결성 제약

위의 두 테이블 STUDENT 및 SUBJECT에는 각각 4개의 값이 표시됩니다. 이제 SQL 명령을 작성하여 STUDENT( Master ) 테이블에서 Roll = 4를 삭제하려고 한다고 가정합니다. Roll = 4인 STUDENT에서 삭제;

SQL이 위 명령을 실행하는 순간 SUBJECT( Child ) 테이블에서 Roll = 4인 행도 삭제됩니다. 학생 및 과목 테이블은 다음과 같습니다:

참조 무결성 제약
참조 무결성 제약

위의 두 테이블 STUDENT와 SUBJECT에서 Roll = 4 테이블 모두 삭제 제약 조건을 위반하지 않고 한 번에 삭제되는 것을 볼 수 있습니다.

때때로 인터뷰에서 다음과 같은 매우 중요한 질문이 제기됩니다. 외래 키가 NULL 값을 가질 수 있습니까?

위 질문에 대한 대답은 '예'입니다. NULL 값을 가질 수 있지만 기본 키는 어떤 경우에도 NULL이 될 수 없습니다. 위의 질문을 실질적으로 이해하기 위해 null 삭제의 개념을 아래에서 이해해 보겠습니다.

NULL 삭제 시.

세트 대 지도

삭제 제약 조건에 따라: 값이 CHILD 테이블에 있는 경우 MASTER 테이블에서 값을 삭제할 수 없습니다. 다음 질문은 삭제 제약 조건을 위반하지 않고 값이 하위 테이블에 있는 경우 마스터 테이블에서 값을 삭제할 수 있습니까? 즉, 마스터 테이블에서 값을 삭제하는 순간 이에 해당하는 값도 하위 테이블에서도 삭제되거나 NULL 값으로 대체될 수 있습니다.

위 질문에 대한 대답은 '예'입니다. 외래 키에 NULL을 삽입하여 삭제 제약 조건을 위반하지 않고 값이 하위 테이블에 있는 경우 마스터 테이블에서 값을 삭제할 수 있습니다. 하위 테이블을 생성하는 동안 약간 수정해야 합니다. 추가하여 삭제 시 null .

테이블 구문:

 CREATE TABLE Subject (Roll int references Student on delete null, SubCode int, SubName varchar(10) ); 

위 구문에서 참조 키워드(외래 키 생성에 사용됨) 바로 뒤에 삭제 null을 추가했습니다. 이제 이를 추가하면 삭제 위반 없이 하위 테이블에 값이 있는 경우 마스터 테이블에서 값을 삭제할 수 있습니다. 강제. 이제 자식 테이블에 Roll =4가 있음에도 불구하고 마스터 테이블에서 Roll = 4를 삭제하고 싶다면 마스터 테이블에서 Roll = 4를 삭제하라는 명령을 내리는 순간 Roll = 4가 있는 행이 삭제되기 때문에 가능합니다. 하위 테이블의 4는 NULL 값으로 대체됩니다.

자바 연결 mysql
참조 무결성 제약
참조 무결성 제약조건

위의 두 테이블 STUDENT 및 SUBJECT에는 각각 4개의 값이 표시됩니다. 이제 SQL 명령을 작성하여 STUDENT( Master ) 테이블에서 Roll = 4를 삭제하려고 한다고 가정합니다. Roll = 4인 STUDENT에서 삭제;

SQL이 위 명령을 실행하는 순간 SUBJECT( Child ) 테이블에서 Roll = 4인 행이 NULL 값으로 대체됩니다. 학생 및 과목 테이블은 다음과 같습니다:

참조 무결성 제약
참조 무결성 제약

위의 두 테이블 STUDENT 및 SUBJECT에서 STUDENT 테이블의 Roll = 4가 삭제되고 SUBJECT 테이블의 Roll = 4 값이 NULL로 대체되는 것을 볼 수 있습니다. 이는 외래 키가 null 값을 가질 수 있음을 증명합니다. SUBJECT 테이블의 경우 Roll 열이 외래 키와 함께 기본 키인 경우 이 경우 외래 키가 NULL 값을 갖도록 만들 수 없습니다.