2012-07-25 1 views
0

행을 삭제해야하는 응용 프로그램이 있습니다. 아직 역할이없는 사용자를 삭제할 때 완벽하게 작동합니다.이 할당되었습니다.참조 된 테이블에서 행 삭제

사용자 :

user_id | user_name | password 
------------------------------ 
    1 | some | some 
    2 | some2 | some2 
    3 | some3 | some3 

역할 :

role_id | role_name 
------------------- 
    1 | admin 
    2 | member 

다음

는 테이블입니다 USER_ROLE :

user_id | role_id 
----------------- 
    1 | 1 
    2 | 2 
    3 | 2 

문제는 내가

DELETE FROM users WHERE user_id = :id 

은 내가 어떻게해야합니까 사용하여 삭제할 수있다?

+1

* 왜 * 할 수 없습니까? 오류가 있습니까? –

답변

0

사용자가 역할을 할당받지 않은 상태에서 사용자 테이블에서 행을 삭제할 수 있지만 할당 된 역할을 삭제할 수없는 경우 외래 키 제약으로 인해 문제가 거의 확실합니다. RESTRICT로 설정됩니다.

여기의 정보는 Wikipedia입니다.

데이터베이스를 설정하는 사람은 누구나 할당 된 역할이있을 때 사용자 삭제가 발생하지 않도록합니다. 삭제가 아무런 일도 일어나지 않고 통과 할 수 있으면 (NO ACTION), 존재하지 않는 사용자를 나타내는 user_role 테이블에 행이있을 것이며 그 재미는 무엇입니까? 다른 가능성이 있습니다. 사용자를 삭제하면 모든 해당 역할이 삭제 될 수 있습니다 (CASCADE). 이 실제로 문제 (제한하도록 설정 제약 조건) 인 경우

, 당신은 물리적으로 지정된 사용자 첫번째user_role 테이블에서 행을 삭제해야합니다, 당신은 사용자를 삭제 할 수 있어야한다.

+0

제약 조건을 어떻게 변경합니까? –

+0

물론 작동해야합니다. 시도 해봐. 귀하는 귀하의 질문에 어떤 데이터베이스를 사용하고 있는지 언급하지 않았습니다. 서로 다른 시스템이 서로 다른 종류의 제약 조건을 지원할 수 있으므로 귀하의 상황에 가장 적합한 제약 조건을 찾으십시오. –

+0

이 효과가 있습니다! 고마워요! –