티스토리 뷰

728x90

동일한 ID를 가진 경우 A 테이블의 NAME 컬럼 값을 B 테이블의 NAME 값으로 변경해야 하는 상황이 생겼다.

 

아래와 같은 경우로, A테이블에 NAME 컬럼이 추가 되어 기본값 NULL 값으로 되어있는데, B테이블에서 해당 ID의 NAME을 찾아 업데이트를 해줄 것이다.

좌 : A테이블 /우 : B테이블

이럴 때 UPDATE JOIN을 통해서 쉽게 변경이 가능하다.

UPDATE TB_A A
  JOIN TB_B B
    ON A.ID = B.ID
   SET A.NAME = B.NAME
 WHERE 조건문

 

근데 이렇게 그냥 바로 되었다면 난 이 블로그를 쓰지 않았을 것이다.

업데이트를 하는데 이상하게 Duplicate 키 에러가 발생하였다.

 

테이블 A의 PK는 ID와 REGIST_DATE인데 나는 이 컬럼들을 업데이트 하지 않았다.

근데 왜 중복키 에러가 발생하지..?

 

Duplicate entry '1-2024-09-12 08:18:31.833524' for key 'PRIMARY'

 

 

쿼리가 잘못되었나 이 방법 저 방법으로 쿼리를 변경 해보았지만..역시나 이상했다 ㅜㅜ 거의 한시간을 삽질 한 듯..

아무리 생각해도 쿼리는 맞는 것 같아서, 테이블 구조를 확인해봤다.

 

테이블 구조를 보니 REGIST_DATE에 테이블의 행이 업데이트될 때, REGIST_DATE 열에 자동으로 현재 시각을 저장하는 설정이 되어있었던 것이다.

따라서, 이름을 변경할 때 해당열의 REGIST_ID가 현재시각으로 업데이트 되어 Duplicate 에러가 발생한 것이다..ㅜㅜ

 

해당 설정을 제거 한 후에는 정상적으로 업데이트가 되는 것을 확인 했다.

ALTER TABLE TB_A MODIFY COLUMN REGIST_DATE datetime(6) DEFAULT current_timestamp(6) NOT NULL COMMENT '등록 시간';

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함