2010-06-10 5 views
2

외래 키와 관련된 MySQL에 상위 및 하위 테이블이있는 경우 SQL 문을 사용하여 Parent 및 Child의 관련 행을 보관 테이블로 이동할 수 있습니까? 예 : Parent_Archive 및 Child_Archive)을 원자 적 방식으로 사용합니까?MySQL의 상위/하위 테이블 계층 구조 보관

답변

1

트랜잭션 사용 - 모든 목적은 일련의 SQL 문을 원 자성으로 만드는 것입니다. 예를 들어

는 (매우 최적화 된 NOT - 임시 테이블로 개선 될 수있다) :

START TRANSACTION; 

INSERT Child_Archive 
SELECT DISTINCT 
Child.* FROM Child, Parent 
WHERE Child.FK = Parent.PK 
    AND Parent.something=11; 

DELETE Child WHERE FK IN (
    SELECT DISTINCT PK FROM Parent WHERE Parent.something=11); 

INSERT Parent_Archive 
SELECT DISTINCT * FROM Parent WHERE Parent.something=11; 

DELETE Parent WHERE Parent.something=11; 

COMMIT; 
+0

Parent_Archive 및 Child_Archive 부모와 자식과 같은 FK 제약 조건을 가정 할 때, 처음 삽입 부모 ISN 때문에 실패하지 않습니다 아직 안 왔어? –

+0

@Eric J. - 그럴 것입니다. 나는 왜 아카이브 테이블이 그런 제약을 가지고 있는지 확신 할 수 없다. (나는 하나도 넣지 않을 것이다). 그것이 디자인이라면, 솔루션은 위에서 언급 한 "성능 향상"입니다. PK/FK의 임시 테이블을 만들어서 먼저 아카이브하고 위에서 언급 한 쿼리를 위에서 언급 한 순서대로 다시 정렬하십시오 (삽입 P_A, C_A에 삽입, C 삭제, P 삭제) – DVK