MySQL에서 중복 데이터가 삽입되지 않도록 방지하고 오류를 표시하려면 UNIQUE KEY(고유 키)를 사용하면 됩니다. 먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1553
-> (
-> EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> EmployeeName varchar(20),
-> EmployeeSalary int
-> );
Query OK, 0 rows affected (0.47 sec)
고유 키(Unique Key) 추가하기
다음 쿼리를 실행하여 EmployeeSalary 컬럼에 고유 키를 추가합니다.
mysql> alter table DemoTable1553 add unique(EmployeeSalary);
Query OK, 0 rows affected (0.53 sec)
Records: 0 Duplicates: 0 Warnings: 0
레코드 삽입 및 중복 오류 확인
이제 insert 명령을 사용하여 테이블에 레코드를 삽입해 보겠습니다.
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('Chris',45000);
Query OK, 1 row affected (0.21 sec)
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('David',35000);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('Sam',25000);
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1553(EmployeeName,EmployeeSalary) values('Carol',45000);
ERROR 1062 (23000): Duplicate entry '45000' for key 'EmployeeSalary'앞서 Chris의 급여로 이미 45000이라는 값을 저장했기 때문에, 같은 급여 값을 가진 Carol의 레코드를 삽입하려고 하자 다음과 같은 오류가 발생했습니다.
ERROR 1062 (23000): Duplicate entry '45000' for key 'EmployeeSalary'
이 오류는 해당 컬럼에 고유 키가 설정되어 있어 중복된 값을 허용하지 않는다는 의미입니다.
저장된 레코드 조회하기
select 문을 사용하여 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1553;
위 쿼리는 다음과 같은 결과를 출력합니다.
+------------+--------------+----------------+
| EmployeeId | EmployeeName | EmployeeSalary |
+------------+--------------+----------------+
| 1 | Chris | 45000 |
| 2 | David | 35000 |
| 3 | Sam | 25000 |
+------------+--------------+----------------+
3 rows in set (0.00 sec)
결과를 확인해 보면 중복된 급여 값(45000)을 가진 Carol의 레코드는 삽입되지 않았습니다. 이처럼 UNIQUE 제약 조건을 설정하면 특정 컬럼에 중복 값이 입력되는 것을 데이터베이스 차원에서 자동으로 차단할 수 있어 데이터 무결성을 유지하는 데 매우 유용합니다.