2014-06-18 3 views
2

방금 ​​혼란스러워서 방금 SQL을 배우기 시작했습니다.외래 키 테이블 업데이트

나는 기본 키가 표 A 경우 : 외래 키의 CustomerID와 CustomerID를 & 표 B를

외래 키 업데이트하거나 기본 키가있을 때 자동으로 삭제해야합니다 그래서 나는 CASCADE를 사용하여 외래 키 제약 조건을 추가

삭제되거나 업데이트되었습니다.

그러나 삭제를 위해서만 작동합니다. 기본 필드 테이블에 새 레코드를 추가 할 때 해당 레코드가 외래 키 테이블에 표시되지 않습니다. 그 이유는 무엇입니까?

+0

http://stackoverflow.com/questions/1481476/when-to-use-on-update-cascade –

+1

기본 키 테이블에 새 레코드를 추가 할 때 외부 키 테이블에 자동으로 나타나기를 원합니다. , 그러나 이것은 업데이트가하는 것이 아닙니다. 업데이트 계단식은 기존 값만 업데이트합니다. – Lenonor

+0

'기본 필드 테이블에 새 레코드를 추가 할 때'? http://docs.cascading.org/cascading/1.2/javadoc/cascading/operation/Insert.html –

답변

1

해당 행을 갱신하거나 행이 갱신 또는 부모 테이블에서 삭제 될 때 참조하는 테이블 에서 삭제됩니다. timestamp 열이 외래 키 또는 참조 된 키의 일부인 경우 CASCADE 을 지정할 수 없습니다. ON DELETE CASCADE는 INSTEAD OF DELETE 트리거가있는 테이블에 대해 으로 지정 될 수 없습니다. ON UPDATE INSTEAD OF UPDATE 트리거가있는 테이블에 대해 CASCADE를 지정할 수 없습니다.

MSDN에 언급 된 내용입니다. 그들은 기본 키 테이블의 유일한 업데이트 및 삭제 작업이 외래 키 테이블의 열에 영향을 미칠 것이라고 언급했습니다. 기본 키에 대한 삽입이 있으면 외래 키에 영향을주지 않습니다. 기본 키와 외래 키 관계의 주요 목표 이후

"모든 각 레코드는 외래 키 테이블에서 사용할 수 있습니다. 해당 레코드는 primay 키 테이블에 있어야하며 반대의 경우도 적용 할 수 없습니다."

외래 키 테이블에 레코드를 삽입하면 외부 참조 무결성 오류가 발생합니다. 기본 키 테이블의 해당 레코드가 될 때까지 외부 테이블에 레코드를 삽입 할 수 없습니다. 정보

은 MSDN에서 다음을 살펴은 링크

http://msdn.microsoft.com/en-us/library/ms179610.aspx

참고 :

이 기능을 달성하고자하는 경우

은 다음 저장 프로 시저 또는 트리거의 로직을 작성해야합니다.

+0

고마워, 지금은 분명해. – Lenonor

0

아니요, 외래 키 테이블에 자동 추가되지 않습니다. 예를 들어 "City"와 "People"테이블이 두 개인 경우에는 FK 참조가 있어야합니다. 시민, 예를 들어 도시에 기록을 추가하는 경우 New York, 데이터베이스는 People 테이블에 누가 삽입해야하는지 알 수 있습니까? 몇 명입니까? , 그리고이 사람들은 무엇을 소유합니까? 예 : 사람 이름?

데이터베이스가 자동으로 그렇게 할 수 없으므로 수동으로해야합니다!