다음과 같은 테이블이 존재한다. (테이블명 : ISS_HH)
SEQ_NO(PK) | USER_ID | INFO1 | INFO2 |
1 | 10001 | HH | KK |
2 | 10002 | HH | KK |
3 | 10003 | HH | KK |
4 | 10004 | HH | KK |
5 | 10005 | HH | KK |
6 | 10006 | HH | KK |
7 | 10007 | HH | KK |
8 | 10008 | HH | KK |
9 | 10009 | HH | KK |
10 | 10010 | HH | KK |
11 | 10011 | HH | KK |
12 | 10012 | HH | KK |
위의 SEQ_NO를 1씩 증가시키기 위해서는 보통 아래와 같은 SQL을 생각하기 쉽다.
SQL>UPDATE ISS_HH SET SEQ_NO = SEQ_NO + 1 WHERE USER_ID > 10000
그러나 위를 실행하면, DUPLICATE ERROR가 발생한다. 이유는 멀까?
PK인 SEQ_NO에 UPDATE시에 데이타가 중복으로 발생하게 된다. 즉 이런 경우는 가장큰 SEQ_NO를 증가시키는것이 일반적이다.
>>>>>>>>>OK QUERY
SQL>UPDATE ISS_HH SET SEQ_NO = SEQ_NO + 1 WHERE USER_ID > 10000 ORDER BY SEQ_NO DESC
-1 을 할경우는 반대로 생각하면 된다.
SQL>UPDATE ISS_HH SET SEQ_NO = SEQ_NO -1 WHERE USER_ID > 10000 ORDER BY SEQ_NO ASC
비고) 한번에 처리하지 않고, 하나씩 처리하는 프로그램으로 작성해보라,ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
비고) 한번에 처리하지 않고, 하나씩 처리하는 프로그램으로 작성해보라,ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
비고) 한번에 처리하지 않고, 하나씩 처리하는 프로그램으로 작성해보라,ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
비고) 한번에 처리하지 않고, 하나씩 처리하는 프로그램으로 작성해보라,ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
'데이타베이스 > MySQL' 카테고리의 다른 글
MySQL innoDB 에서 INSERT 하는 속도를 MyISAM 과 유사하게 변경하는 방법 (0) | 2021.05.28 |
---|---|
MySQL ROWNUM(select @r:=@r+1 As rowNum) (0) | 2019.10.31 |
select T2.t_cnt from DUMMY T1, (select substr(regtime,1,17) as t_regtime, count(1) as t_cnt from RB_OCUS_POS_TEST2 group by substr(regtime,1,17)) T2 where T2.t_cnt > 3000; (0) | 2019.10.31 |
FUNCTION 생성및 활용 (0) | 2019.10.31 |
LINUX,프로그래밍을 통한 PROCEDURE 호출후 결과 (0) | 2019.10.30 |