Database/mariaDB administrator

update auto_increment 컬럼, order by 로 error-1062 없이 실행 하기

sTricky 2021. 11. 25. 16:57

update auto_increment 컬럼, order by 로 error-1062 없이 실행 하기

update auto_increment 컬럼, order by 로 error-1062 없이 실행 하기

안녕하세요.
혹시, auto_increment 로 된 primary key 컬럼을 업데이트 할때 error-1062 Duplicate entry '1' for key 'orderby_test.PRIMARY' 에러가 나는것을 경험 하신적 있으신가요?

꼭 auto_increment가 아니더라도, 숫자로된 primary key 컬럼의 값을 균일하게 변경 하면서 update 할때 에러가 나는 경우가 있으셨을 겁니다.

해당 내용에 대한 실습을 한번 해보도록 하겠습니다.

update, order by와 함께!

자, 실습에 필요한 데이터를 생성 해보도록 하겠습니다.
다음과 같이 테이블을 만들고 데이터를 넣도록 할께요.

create table class.orderby_test
(
    id           int auto_increment primary key,
    country_name varchar(100) comment '나라이름'
);

INSERT INTO class.orderby_test (id, country_name) VALUES (2, '대한민국');
INSERT INTO class.orderby_test (id, country_name) VALUES (3, '필리핀');
INSERT INTO class.orderby_test (id, country_name) VALUES (4, '말레이시아');
INSERT INTO class.orderby_test (id, country_name) VALUES (5, '태국');
INSERT INTO class.orderby_test (id, country_name) VALUES (6, '인도네시아');
INSERT INTO class.orderby_test (id, country_name) VALUES (7, '마카오');

그럼 아래와 같은 테이블을 보실 수 있겠습니다.

orderby_test

 

 

 

그럼 위의 테이블에서 primary key인 id 컬럼값을 1씩 더하는 update를 실행 해보도록 하겠습니다.
SQL은 다음과 같겠죠?

update orderby_test
set id = id + 1;

아고, 이렇게 에러가 나버립니다.

error-1062

당연히 update 하게 되면, 2가 3으로 update 되어야 하니, 이미있는 3값으로 인하여 error-1062가 발생하게 됩니다. 그럼 이건 update를 못하는걸 까요? 그렇다면, 이 포스트를 쓰지도 않았겠죠? ㅎㅎ

이럴때 order by 를 사용 하면 됩니다. order by를 꼭 select 할때만 사용 할 수 있는게 아닙니다.
이번에는 order by를 이용하여 다음과 같이 한번 실행 해보도록 하겠습니다.

update orderby_test
set id = id + 1
order by id desc;

id값이 큰값부터 update를 치닌깐, 7부터 8이되고, 그다음 6이 7이되고.. 그럼 값이 중복 될 일이 없겠죠?
다음과 같이 update가 잘 된 것을 확인 할 수 있습니다.

id 컬럼값 update

이렇게 order by를 이용해서 error없이 update 하는 방법에 대해서 간단하게 알아 보았습니다.
다음에 또 좋은 꿀팁과 함께 돌아오겠습니다.

감사합니다.

by.sTricky