2010-04-19 8 views
5

필드 중 하나가 하위 카테고리 테이블의 외래 키 역할을하는 범주 테이블이 있습니다. 각 테이블의 기본 키의 일부로 사용되는 하나의 필드는 언어 ID입니다. 두 테이블 모두에서이를 업데이트해야합니다. 기본적으로, 두 테이블에서 language id = x가 어디에 있든 y로 설정해야합니다.SQL 외래 키가있는 테이블을 업데이트하십시오.

두 테이블 중 하나를 업데이트하려고하면 'UPDATE 문이 REFERENCE 제약 조건과 충돌합니다.'가 발생합니다.이 제약 조건은 외래 키 제약 조건을 나타냅니다.

이 두 테이블의 언어 필드를 어떻게 업데이트 할 수 있습니까?

+0

'y'가 참조 된 (외래 키) 테이블에 존재하지 않는 것 같습니다. 먼저 추가해야합니다. – Oded

+1

SQL Server? MySQL은? 신탁? 그리고 원형 FK가 있습니까? – gbn

답변

9

1 시간 수정을 수행하는 경우 제약 조건을 삭제하고 UPDATE를 누른 다음 제약 조건을 다시 추가하십시오.

응용 프로그램의 일부로이 작업을 수행해야하는 경우 범주 행 하나를 삽입하고 하위 범주 행을 업데이트 한 다음 원래 범주 행을 삭제하십시오.

5

제약 조건을 삭제하고 값을 업데이트 한 다음 제약 조건을 다시 추가해야합니다.

+0

OP는 이것이 비즈니스 로직의 한 번 또는 일부인지를 말하지 않습니다. 이 방법은 한 번의 변환에는 적합하지만 응용 프로그램 기반 트랜잭션에는 적합하지 않습니다. –

2

먼저 제약 조건을 해제하고 업데이트 한 다음 다시 제약 조건을 활성화해야합니다.

OdeToCode가이 문제를 조사하여 article을 확인하십시오.

2

제약 조건을 ON UPDATE CASCADE으로 변경할 수 있습니다.

+0

+1 DB 엔진이 이것을 지원하지 않는다면 ... – gbn

2

제약 조건을 비활성화하는 것에 대해 항상 염려하고 있습니다. 정말로은 일반적인 작업 인 경우이를 수행하고 싶지 않습니다. 외국 키와 이전 값이 포함 된 모든 자식 행을 업데이트 - 업데이트 할 행에 있지만 새로운 외래 키 값 을 포함 기반으로, 부모 테이블에서 행을 생성 - 가 :

인정 하듯이 추한 대안이다 새로운 가치 - 지금 사용하지 않는 부모 키 행을 삭제하십시오.

명백한 이유는 다양하며, 구현에 적합하지 않을 수도 있지만 데이터베이스 내에서 참조 무결성을 유지합니다.

관련 문제