2011-08-08 4 views
8

외래 키 생성시이 구문이 올바른가?외래 키 생성에서의 MySQL 구문

create table department 
(
    departmentID int not null auto_increment primary key, 
    name varchar(30) 
) type=InnoDB; 

create table employee 
(
    employeeID int not null auto_increment primary key, 
    name varchar(80), 
    job varchar(30), 
    departmentID int not null references department(departmentID) 
) type=InnoDB; 
+0

왜 시도하지 않으시겠습니까? mysql은 어떤 사람보다 문법을 검사하는 것이 더 좋다. – zerkms

+3

@zerkms 나는 이것이 외래 키를 만드는 올바른 방법임을 보여주는 eBook을 가지고 있기 때문에 이것을 묻는다. ** Doug **가 말한 것과는 반대로 _ MySQL처럼 보인다. 그것을 받아들이지 만 (구문에 대해 불평하지는 않지만) 외래 키는 실제로 생성되지 않습니다. _ 이것은 내 강사가 가르쳐 준 방식이 아닙니다. 이것이 제가이 방법이 받아 들여질 수 있는지를 검증하려고 한 이유입니다. – aer

답변

15

MySQL에서 허용하는 것처럼 보이지만 (구문에 대해 불평하지는 않지만) 외래 키는 실제로 생성되지 않습니다.

이 외래 키를 생성이 명령을 실행하려면 :

ALTER TABLE employee ADD CONSTRAINT fk_department FOREIGN KEY (departmentID) REFERENCES department (departmentID); 
+0

내 전자 책에서 외래 키를 만드는 방법은 어떻습니까? _ "이 구문에는 새로운 구문이 하나만 있습니다. 직원 테이블의 마지막 열은 직원이 근무하는 부서의 ID입니다.이 테이블은 외래 키입니다. 참조 절은 다음과 같이 departmentID하지 널 (null) 참조 부서 (departmentID) 이것은 직원 테이블의 departmentID가 부서 테이블의 departmentID 열을 다시 참조해야한다라고 우리에게 이야기를 int로 "_ 당신은 무엇에 대해 말할 수있다. 그것? – aer

+0

그것이 내가 제공 한 코드에 대한 설명입니다. – aer

+2

나는 코드를 직접 시험해 보았고 테이블은 코드로 만들어졌지만, 답안에서 제공 한 코드를 사용하여 외래 키를 별도로 만들 때까지 참조 무결성이 적용되지 않았다. – Doug

2
create table employee 
(
    employeeID int not null auto_increment primary key, 
    name varchar(80), 
    job varchar(30), 
    departmentID int not null ADD CONSTRAINT fk_department FOREIGN KEY (departmentID) references department(departmentID) 
) 
+4

환영합니다! 2 년 후에 왜이 대답이 받아 들여진 대답보다 나은가요? –

1
FOREIGN KEY (departmentID) REFERENCES department(departmentID) 

감사합니다.!