2017-10-15 2 views
0

DDL이SQL의 참조의 integerity 반복적으로

create table manager 
    (employee_name varchar(20) not null, 
    manager_name varchar(20) not null, 
    primary key (employee_name), 
    foreign key (manager_name) references manager on delete cascade); 

같다 relation 다른 튜플은 삭제되지 않습니다. 나는 그렇게 생각했다.

그러나 책의 대답은 모든 튜플이 삭제된다는 것입니다. 나는 왜 모든 튜플이 삭제되었는지 이해할 수 없다.

+0

외래 키 제약 조건에 employee_name을 추가하십시오. 외래 키 (manager_name) 삭제 캐스케이드에서 manager (employee_name)을 참조하십시오. –

+0

해당 DDL이 책에 있습니다. 해당 관계에있는 하나의 튜플이 삭제 된 경우 질문이 발생했습니다. – Damotorie

+0

코드가 유효하지 않습니다. 외래 키의 경우 참조하는 열을 지정해야하며 현재 참조하는 테이블 만 지정합니다. 기본 키를 참조하면 모든 행이 삭제되지 않습니다. 그러나 당신이해야 할 일은 당신이해야 할 일이라는 것을 확인해야합니다. 어쩌면 또 다른 외래 키, 다른 외래 키, 다른 샘플 데이터가 있거나'(A, B)'와 다른 튜플을 삭제해야 그 효과를 얻을 수 있습니다. – Solarflare

답변

0

직원이 인 경우 A, B, C 및 D가 있습니다. 그중 B와 C를 관리자으로 정의했습니다. 그리고 ON DELETE CASCADE을 사용한다는 것을 의미합니다. 즉, 테이블 관리자에서 하나의 상위 튜플을 삭제하면 자동으로 하위 테이블에 영향을줍니다 (Employees 테이블). 당신이 모두 관리자 (B 및 C)을 삭제하기로 결정한 경우

기본적으로, - B 직원으로 A, C 및 D를했고, C는 직원)로 B를했다.

이 경우 테이블 생성시 정의한대로 모든 튜플이 계단식으로 삭제 될 수 있습니다.