MySQL 업데이트 CASE WHEN / THEN / ELSE
이 질문에 이미 답변이 있습니다.
- MySQL 업데이트 케이스 도움말 6 답변
CLI 스크립트를 사용하여 LARGE MyISAM 테이블 (2,500 만 개의 레코드)을 업데이트하려고합니다. 테이블이 다른 것에 의해 잠기거나 사용되지 않습니다.
각 레코드에 대해 단일 UPDATE 쿼리를 수행하는 대신 CASE 기능을 활용하는 것이 좋습니다.
id필드 PRIMARY입니다. 다음 쿼리는 밀리 초가 걸릴 것이라고 생각합니다.
UPDATE `table` SET `uid` = CASE
WHEN id = 1 THEN 2952
WHEN id = 2 THEN 4925
WHEN id = 3 THEN 1592
END
보라, 쿼리는 CPU를 잡아 먹고 영원히 끝나지 않는다.
놀랍게도 쿼리가 2 천 5 백만 행을 모두 업데이트하여 지정하지 않은 행에 NULL을 배치한다는 사실을 알게되었습니다.
그 목적은 무엇입니까? 이 쿼리를 실행할 때마다 2 천 5 백만 행을 업데이트하지 않고 특정 행에 대해 MASS 업데이트를 수행 할 수 있습니까? 아니면 개별 업데이트를 수행 한 다음 커밋해야합니까?
이 시도
UPDATE `table` SET `uid` = CASE
WHEN id = 1 THEN 2952
WHEN id = 2 THEN 4925
WHEN id = 3 THEN 1592
ELSE `uid`
END
WHERE id in (1,2,3)
더 간단합니다.
UPDATE `table` SET uid = ELT(id, 2952, 4925, 1592) WHERE id IN (1,2,3)
이것은 uid가 실제로 1, 2, 3 인 경우에만 작동합니다.
출처 : http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_elt
더 간단합니다.
UPDATE `table` SET uid = ELT(id, 2952, 4925, 1592) WHERE id IN (1,2,3)
ELSE를 놓 쳤기 때문입니다.
"true 인 첫 번째 조건에 대한 결과를 반환합니다. 일치하는 결과 값이 없으면 ELSE 이후의 결과를 반환하고 ELSE 부분이 없으면 NULL을 반환합니다." ( http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#operator_case )
참고 URL : https://stackoverflow.com/questions/12754470/mysql-update-case-when-then-else
'IT박스' 카테고리의 다른 글
| 사용자 지정 속성에 대한 클라이언트 측 유효성 검사 수행 (0) | 2020.10.26 |
|---|---|
| getExternalFilesDir과 getExternalStorageDirectory ()의 차이점 (0) | 2020.10.26 |
| Google Analytics analytics.js 예외 추적에서 예외보고 (0) | 2020.10.26 |
| URL에서 이스케이프 된 문자 디코딩 (0) | 2020.10.26 |
| jQuery Mobile : 동적으로 추가 된 콘텐츠의 마크 업 향상 (0) | 2020.10.26 |