2010-02-08 4 views
1

2 테이블 사이를 동기화하려고합니다 : auto_increment가있는 활성 테이블이 있고 동일한 값을 가진 아카이브 테이블이 있습니다. 둘 다 고유 ID를 (테이블 사이뿐만 아니라) 싶습니다 - 내 말은, 나는 자동 incremenet을 저장하고 싶습니다, 그리고 만약 내가 UNION 두 테이블 나는 여전히 uniqness 있습니다. 어떻게해야합니까? mysql이 꺼져있을 때 자동 증가를 저장할 수 있습니까?MySQL에서 자동 증가 저장

답변

0

처음에는 모든 데이터가 라이브 테이블 (ID 포함)에서 직접 복사되기 때문에 아카이브 테이블에 auto_increment이 없어야합니다. 큰에

ALTER TABLE tbl_name AUTO_INCREMENT = some_new_value 

세트는 테이블 중 하나에 대한 오프셋 및 :

  1. 당신은 사용하여 테이블의 현재 AUTO_INCREMENT을 변경할 수 있습니다

    그러나, 여기에 몇 가지 해키 솔루션입니다 당신은 잠시 동안 안전 할거야. 오프셋에 도달했을 때를 제외하고이 작은 해킹을 잊어 버렸을 때 카드 전체가 머리에 떨어질 것입니다.

  2. 테이블 중 하나에서 오프셋 (예 : SELECT id + 1000000 AS id)을 선택하면 오프셋을 추가 할 수 있습니다. 그래도 해킹은 가능하지만 적어도 표면에 가까워지며 궁극적으로 겹치는 영역에 도달하면 수정하기가 더 쉽습니다.

  3. 마지막으로 한 테이블에서 최대 ID를 선택한 다음 동일한 선택에서이 값으로 다른 테이블의 모든 ID를 오프셋 할 수 있습니다. ID에 대한 충분한 데이터 유형이 있는지 확인하십시오.

+0

안녕하세요, 감사합니다. 나는 아카이브 auto_incremenet을 가지고 있지 않다. 그래서 당신은 아카이브 테이블에서 MAX id를 선택하고 active의 auto_increment를 수정하여 그 시점부터 시작하도록 제안하고 있습니까? – Himberjack

+0

아카이브에'AUTO_INCREMENT'이없고 ID가있는 데이터를 복사하는 경우 아카이브의 ID가 충돌하는 이유는 무엇입니까? 매번 라이브 테이블을 처음부터 생성한다면'CREATE' 문에'AUTO_INCREMENT'를 설정할 수 있습니다. –

+0

내가 1에서 10까지의 활성 ID를 가지고 있고 아카이브에 그대로 옮겨 놓으면 다음 번에 MySQL이 시작될 것이고 1에서 10까지 다시 채울 것이므로 다시 복사 할 때 문제가 발생할 것입니다 아카이브로. – Himberjack