mysql 데이터베이스에서 동일한 예제를 구현해 보겠습니다. 이제 테스트 MySQL 서버에 연결하고 여러 명령을 실행하여 위에서 본 것과 동일한 결과를 얻을 수 있습니다. 트랜잭션 격리와 함께 나타나는 또 다른 중요한 제한 사항: 행에 대한 변경 내용은 트랜잭션이 “볼 수 없는” 데이터에 의해 참조되므로 행이 완전히 계단식으로 배열되지 않을 수 있으므로 행에 계단식으로 배열되지 않을 수 있습니다. 예: 트랜잭션이 고객 계정의 번호를 다시 매기려고 시도하는 동안 동시 트랜잭션이 동일한 고객에 대해 새 송장을 만들려고 시도하는 경우입니다. CASCADE 규칙은 트랜잭션이 볼 수 있는 모든 송장 행을 수정하여 번호가 다시 매겨진 고객 행과 일관되게 유지하지만 다른 트랜잭션에 도달하지 못하여 데이터를 수정합니다. 데이터베이스는 두 트랜잭션이 커밋될 때 일관된 데이터를 보장할 수 없기 때문에 그 중 하나가 강제로 롤백되어야 합니다(종종 선착순으로). 예제에서 기본 키로 추가한 자동 생성 인공 열을 서로게이트 키라고도 합니다. 학생 및 코스 테이블을 예로 들어 보겠습니다. 특성(테이블의 열)은 한 엔터티를 다른 엔터티와 구분하는 데 도움이 됩니다(한 행과 다른 행 – 학생 테이블의 행에는 특정 학생에 대한 모든 세부 정보가 있고 코스 테이블의 행은 코스 세부 정보를 설명합니다). null 외래 키를 갖는 것은 일반적으로 나쁜 생각입니다. 아래 예에서 [dbo]의 레코드입니다. [자식]은 “고아 레코드”라고 불리는 것입니다.

이 작업을 수행하기 전에 길고 열심히 생각하십시오. 외래 키 제약 조건의 주요 목적은 외래 키 테이블에 저장할 수 있는 데이터를 제어하는 것이지만 기본 키 테이블의 데이터 변경도 제어합니다. 예를 들어 Sales.Salesperson 테이블에서 영업 사원의 행이 삭제되고 영업 사원의 ID가 Sales.SalesOrderHeader 테이블의 판매 주문에 사용되는 경우 두 테이블 간의 관계형 무결성이 손상됩니다. 삭제된 영업 사원의 판매 주문은 SalesOrderHeader 테이블의 데이터에 대한 링크 없이 분리됩니다. 외래 키를 설명하는 첫 번째 예로 계정 데이터베이스에 송장이 있는 테이블이 있고 각 송장이 특정 공급자와 연결되어 있다고 가정합니다. 공급업체 세부 정보(예: 이름 및 주소)는 별도의 테이블에 보관됩니다. 각 공급업체에 `공급업체 번호`가 부여되어 이를 식별할 수 있습니다. 각 송장 레코드에는 해당 송장에 대한 공급자 번호가 포함된 특성이 있습니다. 그런 다음 `공급업체 번호`가 공급업체 테이블의 기본 키입니다. 송장 테이블의 외래 키는 해당 기본 키를 가리킵니다. 관계형 스키마는 다음과 같은 것입니다. 기본 키는 굵게 표시되고 외래 키는 기울임꼴로 표시됩니다.

제한(및 CASCADE)을 더 잘 이해하려면 즉시 명확하지 않을 수 있는 다음과 같은 차이점을 알아두는 것이 도움이 될 수 있습니다. 참조 작업은 CASCADE라는 단어가 사용되는 (자식) 테이블 자체의 “동작”을 수정합니다. 예를 들어 ON DELETE CAS는 “참조된 행이 다른 테이블(마스터 테이블)에서 삭제되면 저에게서도 삭제”라고 말합니다.