Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 ON DUPLICATE KEY UPDATE를 활용하기 위한 UNIQUE 제약 조건 추가 방법

MySQL에서 ON DUPLICATE KEY UPDATE 구문이 정상적으로 동작하려면 해당 컬럼에 UNIQUE 제약 조건이 설정되어 있어야 합니다. 중복 키가 감지되면 새로운 행을 삽입하는 대신 기존 행의 값을 업데이트할 수 있기 때문입니다.

제약 조건 추가 문법

테이블에 UNIQUE 제약 조건을 추가하려면 다음과 같은 문법을 사용합니다.

alter table yourTableName add constraint anyName unique(yourColumnName);

예제 테이블 생성

먼저 예제로 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable1459
    -> (
    -> Name varchar(20),
    -> Score int
    -> );
Query OK, 0 rows affected (0.72 sec)

ON DUPLICATE KEY UPDATE용 제약 조건 추가

다음 쿼리는 Name 컬럼에 UNIQUE 제약 조건을 추가하여 ON DUPLICATE KEY UPDATE가 동작하도록 설정합니다.

mysql> alter table DemoTable1459 add constraint Name_const unique(Name);
Query OK, 0 rows affected (1.09 sec)
Records: 0  Duplicates: 0  Warnings: 0

데이터 삽입 및 중복 키 처리 확인

이제 INSERT 명령에 ON DUPLICATE KEY UPDATE 절을 함께 사용하여 레코드를 삽입해 보겠습니다.

mysql> insert into DemoTable1459 values('Chris',57) on duplicate key update Score=Score+10;
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable1459 values('David',89) on duplicate key update Score=Score+10;
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1459 values('Chris',78) on duplicate key update Score=Score+10;
Query OK, 2 rows affected (0.33 sec)

위 실행 결과를 살펴보면, 'Chris'는 이미 테이블에 존재하는 값이므로 새로운 행이 추가되지 않고 기존 행의 Score 값이 10만큼 증가(57 → 67)된 것을 확인할 수 있습니다.

결과 확인

SELECT 문을 사용하여 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1459;

실행 결과는 다음과 같습니다.

+-------+-------+
| Name  | Score |
+-------+-------+
| Chris |    67 |
| David |    89 |
+-------+-------+
2 rows in set (0.00 sec)

이처럼 UNIQUE 제약 조건이 설정된 컬럼에 중복된 값을 가진 데이터를 INSERT하면, MySQL은 오류를 발생시키는 대신 ON DUPLICATE KEY UPDATE 절에 지정한 대로 기존 행을 자동으로 업데이트합니다. 이 기능은 중복 입력 방지와 함께 점수 누적, 재고 수량 갱신 등의 로직을 간단하게 구현할 때 매우 유용합니다.