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

MySQL에서 varchar 열에 UNIQUE 제약 조건 적용하는 방법

MySQL에서 varchar 열(또는 여러 열의 조합)에 고유성을 부여하려면 UNIQUE 제약 조건을 사용하면 됩니다. 하나의 열뿐만 아니라 두 개 이상의 열 조합에도 적용할 수 있으며, 이 경우 해당 열들의 값 조합 전체가 중복되지 않도록 강제됩니다.

alter table yourTableName add unique(yourColumnName1, yourColumnName2, ...N);

예제 테이블 생성

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

mysql> create table DemoTable1598
-> (
-> EmployeeId int,
-> EmployeeName varchar(20),
-> EmployeeCountryName varchar(20)
-> );
Query OK, 0 rows affected (0.52 sec)

varchar 열에 UNIQUE 제약 조건 추가

다음은 varchar 타입인 EmployeeName과 EmployeeCountryName 두 열에 UNIQUE 제약 조건을 적용하는 쿼리입니다.

mysql> alter table DemoTable1598 add unique(EmployeeName, EmployeeCountryName);
Query OK, 0 rows affected (0.55 sec)
Records: 0 Duplicates: 0 Warnings: 0

이렇게 설정하면 두 열의 값 조합이 완전히 동일한 데이터는 더 이상 입력할 수 없습니다. 즉, 직원 이름이 같더라도 국가명이 다르면 정상적으로 저장할 수 있습니다.

데이터 삽입 및 중복 확인

insert 명령으로 몇 개의 레코드를 삽입해 보겠습니다.

mysql> insert into DemoTable1598 values(101,'Adam','AUS');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable1598 values(102,'John','US');
Query OK, 1 row affected (0.64 sec)
mysql> insert into DemoTable1598 values(103,'Adam','US');
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable1598 values(104,'Adam','AUS');
ERROR 1062 (23000): Duplicate entry 'Adam-AUS' for key 'EmployeeName'

앞의 세 건은 정상적으로 삽입되었지만, 네 번째 INSERT 문은 오류와 함께 실패했습니다. 그 이유는 이미 ('Adam', 'AUS') 조합이 테이블에 존재하기 때문입니다. 반면 세 번째 데이터인 ('Adam', 'US')는 이름은 같지만 국가명이 다르므로 정상적으로 저장된 점에 주목하세요. 이것이 바로 복합 UNIQUE 키의 동작 방식입니다.

결과 확인

select 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1598;

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

+------------+--------------+---------------------+
| EmployeeId | EmployeeName | EmployeeCountryName |
+------------+--------------+---------------------+
| 101 | Adam | AUS |
| 102 | John | US |
| 103 | Adam | US |
+------------+--------------+---------------------+
3 rows in set (0.00 sec)

정리

varchar 열에 UNIQUE 제약 조건을 적용하면 단일 열 또는 여러 열의 조합에 대해 중복 데이터 입력을 효과적으로 방지할 수 있습니다. 복합 UNIQUE 키를 사용하면 각 열의 값이 개별적으로 중복되어도 조합 전체가 유일하기만 하면 정상적으로 저장되므로, 실무에서 데이터 무결성을 확보하는 데 매우 유용하게 활용됩니다.