순차적으로 숫자를 컬럼에 일괄 업데이트하기! (MYSQL)
기존 데이터를 마이그레이션 하는 과정에서, 새로 생긴 컬럼에 값이 null로 들어가는 일이 발생했다.
직접 데이터를 넣으라는 팀장님의 명령….!
새로운 미션에 부랴부랴 일괄 업데이트를 찾아봤다.
-------------------------------
id | inquiry_no
1669529932788662274 | 0000000001
1669529932788662275 | 0000000002
1669529932788662280 | 0000000003
1669529932788662281 | 0000000004
1669529932788662286 | 0000000005
.
.
.
데이터를 위와 같은 형태로 넣어줘야했다.
내가 데이터를 넣어야하는 컬럼은 바로 inquiry_no.
0000000001 부터 차례대로 넣어줘야 하는데…
직접 넣는 것은…. 데이터가 방대하기 때문에 불가능하고…
쿼리문을 짜서 넣는 게 제일 편해보였다.
인터넷 검색도 하고, 여기저기 참고해본 결과..
(내가 검색어를 잘못 지정한건지 뭔지… 결과가 많지 않아서 조금 힘들었다 ㅋㅋ)
SELECT @inquiry_no:=0;
UPDATE inquiry SET inquiry_no = @inquiry_no:= LPAD(@inquiry_no+1, 10, '0');
단 두줄로 해결이 됐다! ㅎㅎ
하나씩 살펴볼까나…?!
@inquiry_no:=0
이건 변수를 설정하는 것이다.
어쨌든 나는 차례대로 값을 늘려나가는 작업을 해야하기 때문에 변수를 지정해야 했다.
이전 값에서 +1을 하는 작업을 할 것이기 때문에, 0으로 값을 넣어주었다.
@inquiry_no=0 의 형태로도 사용가능하지만, SET 이외의 명령문에서는 =가 비교연산자이므로, := 을 권장한다.
UPDATE inquiry SET inquiry_no = @inquiry_no:= LPAD(@inquiry_no+1, 10, '0')
LPAD 함수는 지정한 길이만큼 왼쪽부터 지정한 문자로 채운다. (오른쪽은 RPAD)
나는 ‘0’으로 지정했기 때문에, 길이 10이 될때까지 0으로 채워준다.
“총문자길이” - Length(“값”) = 채움문자수.
10 - Length(@inquiry_no) = 채워야하는 ‘0’의 수인 것이다.
생성한 값을 다시 @inquiry_no에 넣고, 그걸 inquiry_no 컬럼에 업데이트 해준다.
그러면 일괄적으로 업데이트 끝!!!!
참고로, 업데이트 작업 시에 where 절로 특정 데이터나, 특정 조건을 지정해주지 않으면 전체 데이터가 업데이트 된다.
오늘도 새로운 것을 알게 되었고, 또 적용도 해보았다.
인생에 배움은 끝이 없다지만, 나는 정말 아직 모르는 것이 너무 많은 것 같다.
큰 벽에 가로막혀있는 것 같다가도 이렇게 하나씩 해결할 때면, 노력으로 안될 건 없다는 생각도 한다.
좌절만 하는 것은 나에게 도움이 되지 않는다.
차근차근 모르는 것들을 배워나가고, 내 앞에 놓인 문제들을 하나씩 해결하다보면 길이 보일 것이다.
오늘도 화이팅!