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

MySQL에서 행의 고유성을 확인하는 방법

MySQL 행 고유성 검증을 위한 UNIQUE 제약 조건 활용법

MySQL에서 특정 행이 중복되지 않도록 보장하려면 UNIQUE 제약 조건(Unique Constraint)을 사용해야 합니다. 이 제약 조건은 하나 또는 여러 개의 컬럼 조합에 적용할 수 있으며, 동일한 값이 다시 입력되는 것을 데이터베이스 차원에서 자동으로 차단합니다.

1. 테이블 생성

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

mysql> create table DemoTable1580
    -> (
    -> id int,
    -> Name varchar(20),
    -> Age int
    -> );
Query OK, 0 rows affected (0.73 sec)

2. UNIQUE 인덱스 추가

다음 쿼리를 실행하여 세 개의 컬럼(id, Name, Age) 조합 전체가 고유하도록 유니크 인덱스를 생성합니다.

mysql> alter table DemoTable1580 add unique index(id,Name,Age);
Query OK, 0 rows affected (0.45 sec)
Records: 0  Duplicates: 0  Warnings: 0

3. 데이터 삽입 및 중복 테스트

이제 INSERT 명령으로 레코드를 몇 개 추가해 보겠습니다.

mysql> insert into DemoTable1580 values(101,'Chris',21);
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable1580 values(102,'Chris',21);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1580 values(102,'David',21);
Query OK, 1 row affected (0.49 sec)
mysql> insert into DemoTable1580 values(101,'Chris',21);
ERROR 1062 (23000): Duplicate entry '101-Chris-21' for key 'id'

위 결과를 보면 처음 세 개의 INSERT 문은 각각 id, Name, Age 값의 조합이 서로 달랐기 때문에 정상적으로 입력되었습니다. 하지만 네 번째 INSERT 문은 이미 존재하는 (101, 'Chris', 21) 조합과 완전히 동일했기 때문에 ERROR 1062 (Duplicate entry) 오류가 발생하며 입력이 거부됩니다.

4. 저장된 데이터 확인

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

mysql> select * from DemoTable1580;

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

+------+-------+------+
| id   | Name  | Age  |
+------+-------+------+
|  101 | Chris |   21 |
|  102 | Chris |   21 |
|  102 | David |   21 |
+------+-------+------+
3 rows in set (0.00 sec)

정리

UNIQUE 제약 조건은 단일 컬럼뿐 아니라 여러 컬럼의 조합(composite key)에도 적용할 수 있습니다. 위 예제처럼 (id, Name, Age) 세 컬럼을 묶어 유니크 인덱스를 생성하면, 세 값이 모두 같은 경우에만 중복으로 판단하고 하나라도 다르면 새로운 행으로 허용됩니다. 이를 통해 애플리케이션 로직에 의존하지 않고도 데이터베이스 수준에서 데이터 무결성을 확보할 수 있습니다.