본문 바로가기
MySql

MySQL 복합 기본 키를 외래 키로 사용

by 베이스 공부 2021. 2. 11.
반응형

복합 기본 키를 외래 키로 사용하려면 어떻게해야합니까? 내 시도가 작동하지 않는 것 같습니다.

create table student
(
student_id varchar (25) not null ,
student_name varchar (50) not null ,
student_pone int ,
student_CNIC varchar (50),
students_Email varchar (50),
srudents_address varchar(250),
dept_id varchar(6),
batch_id varchar(4),
FOREIGN KEY (dept_id) REFERENCES department(dept_id),
FOREIGN KEY (batch_id) REFERENCES batch(batch_id),
CONSTRAINT pk_studentID PRIMARY KEY (batch_id,dept_id,student_id) )
create table files
(
files_name varchar(50) not null ,
files_path varchar(50),
files_data varchar(max),
files_bookmarks xml ,
FOREIGN KEY (pk_studentID ) REFERENCES student(pk_studentID ),
CONSTRAINT pk_filesName PRIMARY KEY (files_name) )

 

해결 방법

 

라인 :

FOREIGN KEY (pk_studentID ) REFERENCES student(pk_studentID ),

잘못되었습니다. 이와 같이 pk_studentID 를 사용할 수 없습니다. 이것은 상위 테이블에있는 PK 제약 조건의 이름 일뿐입니다. 복합 기본 키를 외래 키로 사용하려면 동일한 데이터 유형을 가진 동일한 수의 열 (PK를 구성하는)을 자식 테이블에 추가 한 다음 FOREIGN KEY <에서 이러한 열 조합을 사용해야합니다. / code> 정의 :

CREATE TABLE files
(
  files_name varchar(50) NOT NULL, 

  batch_id varchar(4) NOT NULL,         --- added, these 3 should not
  dept_id varchar(6) NOT NULL,          --- necessarily be NOT NULL
  student_id varchar (25) NOT NULL,     --- 

  files_path varchar(50),
  files_data varchar(max),              --- varchar(max) ??   
  files_bookmarks xml,                  --- xml ??
                                        --- your question is tagged MySQL, 
                                        --- and not SQL-Server

  CONSTRAINT pk_filesName 
    PRIMARY KEY (files_name),

  CONSTRAINT fk_student_files                     --- constraint name (optional)
    FOREIGN KEY (batch_id, dept_id, student_id)  
      REFERENCES student (batch_id, dept_id, student_id)
) ENGINE = InnoDB ;

 

참조 페이지 https://stackoverflow.com/questions/10565846

 

 

반응형

댓글