2013-05-28 4 views
3

Oracle 10g를 사용 중입니다. 내가 다른 테이블의 열을 참조하는 내가 외국 키로 deptId의 열을 사용하여 내 사용자 목록 테이블에 새 열 deptId을 추가하고 Departments.DepartmentId 열을 외래 키로 추가하는 것과 구속으로 추가하는 것의 차이점

Query1을

제약 및 첫 번째 쿼리로 외래 키를 추가하는 사이에 차이가있다
ALTER TABLE UserList 
ADD FOREIGN KEY (DeptId) 
REFERENCES Departments(DepartmentId)  

QUERY2

ALTER TABLE UserList 
ADD CONSTRAINT fk_DeptId FOREIGN KEY (DeptId) 
REFERENCES Departments(DepartmentId) 
+0

귀하의 질문은 열을 추가한다는 것을 의미합니다. 실제로는 여기에 제약 조건을 추가하는 것이므로 편집 할 수도 있습니다. –

답변

4

선택적 "CONSTRAINT"및 제약 조건 절을 사용하는 경우를 제외하면 차이가 없습니다.

두 가지 종류의 제약 조건 정의가 있습니다 : 인라인과 아웃 오브 라인. 전자는 열 정의의 일부로 열에서 작동하므로 DeptID 열의 이름을 지정할 필요가 없습니다. 후자는 테이블 정의의 일부이므로 수행합니다. 귀하의 예

라인의 제약에서,하지만 당신은 나쁜 관행입니다 전자의 경우에 제약라는 않은 :

http://docs.oracle.com/cd/E18283_01/server.112/e17118/clauses002.htm#g1053592

4

두 번째 구문을 사용하면 제약 조건의 이름을 지정할 수 있습니다. 첫 번째는 그렇지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 그래서 외래 키를 추가하는 것은 무제한 추가라는 것과 같습니다. Constraint –

+0

예, 제약 조건 이름이없는 동일한 구문입니다. [documentation] (http://docs.oracle.com/cd/B28359_01/server.111/b28286/clauses002.htm#CJAEDFIB)을 참조하십시오. –

+0

글쎄, 그것은 이름이 지정되지 않았으며, SYS_C132432와 같이 시스템 생성 이름을 얻으려고합니다. –

-2
 

ALTER TABLE [dbo].[UserList] WITH NOCHECK ADD CONSTRAINT [fk_DeptId] FOREIGN KEY([DeptId]) 
REFERENCES [dbo].[Departments] ([DepartmentId]) 

아니, 차이가 없기를 두 쿼리 모두에서. 외래 키 제약 이름의 이름을 지정합니다. 위의 쿼리를 사용할 수 있습니다.

관련 문제