2017-11-01 1 views
-1

이 질문을 여러 번 다시 써 보았습니다. 질문하는 방법을 이해할 수없는 것 같습니다. 나는 지난 2 시간 동안 연구를 해왔고, 내가 잘못된 것들을 찾고 있는지 잘 모른다. 외래 키에 대한 MYSQL 문서 (https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html)를 읽었습니다. 내 이해에서 외래 키는 기본 키를 가리키고 외래 키 값은 기본 키 값을 복제해야합니다. 이것은 중복 될 수있는 정보를 저장하는 데 도움이되므로 일대 다 관계라고 말하십시오.어떻게 외래 키 값을 기본 키 값과 같게 만드나요?

이 내 MySQL 테이블에 적용 할 때, 내 첫 번째 테이블의 기본 키를 가리키는 내 두 번째 테이블에 외래 키 제약 조건을 추가합니다. 내 두 번째 테이블의 다른 모든 것은 학습을 위해 nullable입니다.
첫 번째 테이블에 쿼리를 입력하면 기본 키가 자동으로 증가하지만 두 번째 테이블의 외래 키 값은 기본 키를 복제하도록 업데이트되지 않습니다.

기본 키와의 외래 키 관계가 올바르지 않거나 제대로 작동하지 않는지 또는 오른쪽에서 첫 번째 테이블 기본을 복제하기 위해 두 번째 테이블에서 삽입 명령을 수동으로 쿼리해야하는지 파악하려고합니다. 외부 키는 기본 키의 값을 자동으로 복제하지 않습니다. 그렇다면 값을 연결하거나 동일하게 할 필요가 없다면 기본 키와 외래 키의 핵심은 무엇입니까? 나는 여러 가지 소스에서 여러 페이지를 읽은 후에 키의 관계를 이해하지 못하기 때문에 정말 좌절감을 느끼고 바보 스럽다고 느낍니다.

+0

두 번째 테이블 (외래 키)의 레코드는 자동으로 생성되지 않아야합니다. 두 번째 테이블에도 레코드를 추가하는 코드를 작성해야합니다. 외래 키 제약 조건은 고아 레코드를 만들지 않도록하기위한 것이며, 이는 데이터의 무결성이 유지된다는 것을 의미합니다. – Sparrow

답변

0

PRIMARY KEY - FOREIGN KEY는 테이블 간의 관계를 만드는 방법입니다. 다음 테이블을 고려하십시오 : 학생, 코스, 수업. 단순화를 위해

Student(StudentId, StudentName) 
Course(CourseId, CourseName) 
Class(ClassId, CourseId, StudentId) 

이 경우 클래스 테이블에는 학생 및 코스 테이블을 참조하는 외래 키가 있습니다. 새로운 학생 및/또는 코스를 추가 할 수는 있지만 학생이 클래스에 등록 할 수 없으므로 클래스 테이블에 자동으로 추가되지 않습니다. 수업에는 강사가 없기 때문에 수업이 즉시있을 수 없습니다.

수업에는 학생과 수업이 필요합니다. 이것이 관계가 유용한 곳입니다. 학생이 수업에 추가되기 전에 학생 테이블에 있어야합니다. 수업은 존재할 수 있기 전에 존재해야합니다.

0

첫 번째 테이블에 행을 추가하면 항상 두 번째 테이블에 해당 행이 생성되므로 테이블간에 일대일 관계를 유지하려면 첫 번째 테이블에서 AFTER INSERT 트리거를 사용할 수 있습니다. NEW.id을 사용하여 새 행에 할당 된 ID를 가져온 다음 두 번째 테이블에서 INSERT을 수행하여 외래 키로 행을 만들 수 있습니다.