2017-10-25 8 views
0

SQL 전문가, 나는이 작업을 어떻게 완료 할 것인지 잘 모르겠다. MySQL 데이터베이스 테이블에 식별자 (라운드 로빈 스타일)로 group 열을 업데이트해야하는 40k 레코드가 있습니다. 식별자는 미리 정의되어 있습니다 (2, 5, 9).MySQL 라운드 로빈 업데이트

어떻게하면이 테이블을 업데이트 할 수 있습니까? 아래 예와 같이 보일 것입니다 :

record  group 
----------------- 
record A 2 
record B 5 
record C 9 
record D 2 
record E 5 
record F 9 
record G 2 

어떤 도움을 주시면 감사하겠습니다!

+0

you.https에 대한 답변이 있으면 여기를 확인하십시오 : //stackoverflow.com/questions/35903375/how-to-update-large-table-with-millions-of-rows-in-sql-server –

+0

@ Alourenço 감사합니다. ,하지만 나를 위해 작동하지 않습니다. 그 답변들은 모두 같은 값의 질량 지정을 중심으로 회전하지만 세 가지 다른 값을 로빈하고 싶습니다. – NightOwlPrgmr

답변

0

수십 개의 기사를 조사한 후에도 필자는 필자가 필요로하는 것을 달성하기 위해 2 단계 접근법을 공식화했습니다. 여기에 올 수있는 다른 사람들을 위해 내가 한 일이 있습니다.

1 단계 : 루프를 통해 각 레코드에 번호를 할당하는 저장 프로 시저를 만들었습니다. 숫자는 1에서 3까지의 라운드 로빈 값을 나타냅니다 (2, 5, 9).

DROP PROCEDURE IF EXISTS ezloop; 
DELIMITER ;; 

CREATE PROCEDURE ezloop() 
BEGIN 
DECLARE n, i, z INT DEFAULT 0; 
SELECT COUNT(*) FROM `table` INTO n; 
SET i = 1; 
SET z = 1; 
WHILE i < n DO 
    UPDATE `table` SET `group` = z WHERE `id` = i; 
    SET i = i + 1; 
    SET z = z + 1; 
    IF z > 3 THEN 
     SET z = 1; 
    END IF; 
END WHILE; 
End; 
;; 

DELIMITER ; 
CALL ezloop(); 

2 단계 : 아래 절차는 내 실제 라운드 로빈 값에 각각의 값을 업데이트하는 간단한 UPDATE 문을 생성하고 각 그룹에 대해 한 번 실행 :

UPDATE `table` SET `group` = 9 WHERE `group` = 3; 
UPDATE `table` SET `group` = 5 WHERE `group` = 2; 
UPDATE `table` SET `group` = 2 WHERE `group` = 1;