2011-02-28 4 views
2

테이블에서 다른 레코드로 오래된 레코드를 이동하고 싶습니다.MySQL - 테이블의 하위 집합을 다른 테이블로 이동

내가 이렇게 할 경우 :

INSERT INTO archived_item SELECT * FROM item WHERE is_sold=1 AND sold_at < DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) 

I 행을 복사 단지 것이다. 하지만 로 이동해야합니다. 나는 이전 후이 쿼리를 실행 생각하지 않는다

이상적입니다 : 나도 외부 도구를 사용하여 좋아하지 않을

DELETE FROM item WHERE is_sold=1 AND sold_at < DATE_SUB(CURRENT_DATE, INTERVAL 6 MONTH) 

.

SQL을 통해이를 달성 할 수 있습니까?

답변

1

아는 한,이 작업을 수행하는 유일한 방법은 INSERT 쿼리를 실행 한 다음 원본 테이블에서 삭제 쿼리를 실행하는 것입니다. 그것을 성취 할 다른 방법은 없습니다.

+0

좋은 방법이라고 생각하십니까? 불일치로 이어질 수 없습니까? – dan

+0

글쎄, 트랜잭션을 사용하여 대상 테이블에 삽입 된 레코드가 소스 테이블에서 삭제되어야하는지 확인할 수 있습니다. 무슨 불일치가 있니? –

+0

아, 네 말이 맞아! – dan

1

내가 아는 한, 불가능합니다. 이전 테이블에서 데이터를 제거하려면 명시 적으로 delete 명령을 실행해야합니다.

1

두 명령을 함께 수행하는 데는 아무런 문제가 없습니다. 그것은 당신이 원하는 것을하는 적절한 방법입니다.

실제로 이동 한 것만 삭제한다는 것을 보장하려면 명령을 transaction에 랩핑해야합니다.

지금까지 질문 할 수있는 유일한 사항은 아카이브 및 작업 세트에 대해 서로 다른 테이블을 갖는 실제 결정입니다.

이 두 가지 이유가있을 수 있습니다 : 적절한 인덱스 문제가되지해야

성능 혼자 두 세트에 적용

  • 성능
  • 다른 데이터 무결성 규칙, 때까지 아주 많은 수의 레코드를 쳤습니다. 또한 사용자 인터페이스의 복잡성이 증가하고 유지 관리로 변환되는보고가 위와 같이됩니다 (보관 기록에 다른 규칙이 적용되거나 데이터 구조가 동일하지 않은 경우 칭의가 더 쉬운 경우).

관련 문제