2012-02-27 2 views
10

2 개의 다른 테이블에서 복사 한 2 개의 컬럼을 가진 테이블이 있습니다. 지금하고 싶은 것은 아래에 표시된 컬럼 이름 이메일과 ID에 외래 키 제약 조건을 부여하는 것입니다.외래 키 제약 조건을 부여하기 위해 테이블을 변경하십시오.

ALTER TABLE users_role_map 
ADD CONSTRAINT FK_users_role_map 
FOREIGN KEY (email) REFERENCES usert(email), 
FOREIGN KEY (id) REFERENCES rolet(id) 
ON UPDATE CASCADE 
ON DELETE CASCADE; 

나는 다음과 같은 오류 얻을 :이 문에서 제약 조건을 추가하지 않는

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 'FOREI 
GN KEY (id) REFERENCES rolet(id) 
ON UPDATE CASCADE 
ON DELETE CASCADE' at line 4 

답변

29

을, 당신은 제약 조건을 추가 : 두 개의 FOREIGN KEY 절은 각각 별도의 의미 강제. 여전히 manual에 따르면 필요한만큼 단일 ALTER TABLE 문에 많은 외래 키 제약 조건을 추가 할 수 있어야합니다. 모든 제약 조건 앞에 ADD을 포함하면됩니다.

제약 조건 이름은 추가하는 제약 조건에 개별적으로 적용되므로 두 번째 외래 키에 특정 이름을 지정하려면 CONSTRAINT name을 지정해야 할 수 있습니다. ON UPDATE/ON DELETE과 동일합니다. 바로 앞의 외래 키에 적용됩니다.

그래서, 수정 문은 다음과 같습니다이 올바른 보이는

ALTER TABLE users_role_map 

ADD CONSTRAINT FK_users_role_map1 
FOREIGN KEY (email) REFERENCES usert(email) 
ON UPDATE CASCADE ON DELETE CASCADE, 

ADD CONSTRAINT FK_users_role_map2 
FOREIGN KEY (id) REFERENCES rolet(id) 
ON UPDATE CASCADE 
ON DELETE CASCADE; 
+1

. 내 경험에 비추어 볼 때 수동으로 컨 스트레인 트나 인덱스의 이름을 지정하지 않아도 MySQL에서 처리하게합니다. –

+0

예, 이름 지정은 선택 사항입니다. SQL Server에서는 선택 사항이기도하지만 이름을 지정하는 것을 선호합니다. –

+0

궁금한 점, 왜? –

관련 문제