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 제약조건을 설정하면 개별 컬럼 값이 같아도 조합 전체가 동일한 경우에만 중복으로 판단하므로, 데이터 무결성을 효과적으로 보호할 수 있습니다.