2012-01-03 6 views
0

나는 검색했지만 테이블을 자르는 것과 관련된 많은 질문이 있지만 테이블을 비우지 않고 에서 삭제해야합니다. 모두 테이블 여러 개의 쿼리 대신 하나의 쿼리를 사용합니다.특정 ID로 모든 테이블에서 삭제

지금까지 데이터베이스에 34 개의 테이블이 있는데, 요청되었을 때 특정 ID가있는 모든 행을 삭제해야합니다. 예 :

DELETE FROM table1, table2 ... table33, table34 
WHERE customer_id = 4 

이 작업을 수행 할 수있는 쿼리는 어떻게합니까? 다른 생각으로는 모든 테이블에 customer_id과 같은 행이 없을 수 있으므로 ID가 4 인 레코드가 없어도 삭제해야합니다.

+0

모든 테이블이'customer_id' 열이 할 수 있습니까? –

+0

왜 그렇게해야합니까? – Lion

+0

그들은 사이트를 복제했기 때문에 고객 ID를 참조하지만 그 이유는 모두 설명 할 수는 없습니다. 내가 복제 사이트를 관리하고 있기 때문에이 작업을 수행해야하는 이유는 복제 사이트를 사용 중지, 삭제 및 편집 할 권한이 있기 때문입니다. 따라서 복제 된 사이트를 삭제하면 모든 행이 고객 ID로 삭제됩니다. – MacMac

답변

2

찾을 수없는 이유는 실제로 필요하지 않기 때문입니다. 나는 당신이 적절하게 foreign key constraints을 사용한다면 보통 할 필요가 없기 때문에 이것을 할 방법이 있다고 생각하지 않습니다. 이를 유지 관리하는 적절한 방법은 외래 키 제약 조건을 설정하여 고객 ID (ex customer_purchase)가있는 테이블에서 custom_id가 기본 키인 테이블을 가리 키도록하는 것입니다. 그런 다음 customer_id가 기본 키인 테이블에서 고객을 삭제할 때. 해당 고객을 언급하는 다른 모든 테이블도 h 제됩니다.

내가 방금 언급 한 것에서 건물. 많은 사람들이 "부드러운"삭제를 선택합니다. 여기서 고객 테이블에 플래그를 설정 한 다음 삭제 될 때 단순히 "1"로 설정합니다. 이를 수행하려는 이유는 감사 기능 때문입니다. 예를 들어, 모든 구매 기록을 보관해야한다고 가정 해보십시오. 고객이 삭제 된 경우에도 마찬가지입니다. 이러한 상황에서; 소프트 삭제를 수행하여 고객이 삭제 될 때 구매 내역에서 항목을 잃지 않도록해야합니다.

1

나는이 당신을 위해 허용 솔루션의 경우 잘 모르겠지만, 당신은 당신

DELETE t1, t2, ... FROM table1 t1, table2 t2, ... 
WHERE t1.customer_id = 4 AND t2.customer_id = 4 AND ...