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

MySQL에서 항목 조합의 중복 삽입을 방지하는 방법

MySQL에서 여러 컬럼 값의 조합이 중복으로 저장되는 것을 막으려면 테이블에 UNIQUE 제약조건을 추가하면 됩니다. 아래 문법과 같이 ALTER TABLE 문을 사용해 해당 컬럼들에 UNIQUE 제약조건을 설정할 수 있습니다.

ALTER TABLE yourTableName ADD CONSTRAINT yourConstraintName UNIQUE(yourColumnName1, yourColumnName2, ....N);

예제 테이블 생성하기

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

mysql> CREATE TABLE DemoTable
(
    Value1 int,
    Value2 int
);
Query OK, 0 rows affected (0.47 sec)

UNIQUE 제약조건 추가하기

다음 쿼리는 Value1과 Value2 두 컬럼의 조합이 중복되어 삽입되지 않도록 제약조건을 추가합니다.

mysql> ALTER TABLE DemoTable ADD CONSTRAINT Value1_Value2_ConstraintKey UNIQUE(Value1, Value2);
Query OK, 0 rows affected (0.80 sec)
Records : 0 Duplicates : 0 Warnings : 0

중복 삽입 시도 및 결과 확인

이제 INSERT 명령으로 레코드를 삽입해 보겠습니다. 동일한 조합을 다시 삽입하려고 하면 "Duplicate entry" 오류가 발생하며, 중복 데이터는 저장되지 않습니다.

mysql> INSERT INTO DemoTable VALUES(10,10);
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable VALUES(10,20);
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO DemoTable VALUES(10,10);
ERROR 1062 (23000) : Duplicate entry '10-10' for key 'Value1_Value2_ConstraintKey'
mysql> INSERT INTO DemoTable VALUES(20,10);
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable VALUES(20,20);
Query OK, 1 row affected (0.23 sec)
mysql> INSERT INTO DemoTable VALUES(20,10);
ERROR 1062 (23000) : Duplicate entry '20-10' for key 'Value1_Value2_ConstraintKey'

위 실행 결과를 보면 (10, 10)과 (20, 10) 조합을 다시 삽입하려고 할 때 각각 ERROR 1062 오류가 발생한 것을 확인할 수 있습니다.

최종 데이터 조회

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> SELECT *FROM DemoTable;

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

+--------+--------+
| Value1 | Value2 |
+--------+--------+
|     10 |     10 |
|     10 |     20 |
|     20 |     10 |
|     20 |     20 |
+--------+--------+
4 rows in set (0.00 sec)

결과적으로 중복된 조합은 모두 걸러지고, 서로 다른 조합 4개만 정상적으로 저장된 것을 확인할 수 있습니다. 이처럼 복수 컬럼에 UNIQUE 제약조건을 설정하면 개별 컬럼 값이 같아도 조합 전체가 동일한 경우에만 중복으로 판단하므로, 데이터 무결성을 효과적으로 보호할 수 있습니다.