이 글에서는 SQL Server에서 고유 제약 조건(UNIQUE Constraint)을 생성하고, 기존 테이블에 추가하며, 삭제하는 방법을 예제와 함께 자세히 살펴봅니다.
SQL Server의 고유 제약 조건이란?
고유 제약 조건은 테이블 내에서 하나의 필드 또는 여러 필드의 조합이 각 레코드를 고유하게 식별하도록 보장하는 규칙입니다. 값의 조합 전체가 유일하기만 하다면, 개별 필드에는 NULL 값이 포함될 수도 있습니다.
고유 제약 조건과 기본 키(PRIMARY KEY)의 차이점
두 제약 조건은 모두 중복 값을 방지한다는 점에서 비슷하지만, 다음과 같은 중요한 차이가 있습니다.
| 구분 | 기본 키(PRIMARY KEY) | 고유 제약 조건(UNIQUE) |
|---|---|---|
| NULL 허용 여부 | 기본 키를 구성하는 어떤 필드에도 NULL 값을 허용하지 않습니다. | 값의 조합이 유일하기만 하면 일부 필드에 NULL 값을 포함할 수 있습니다. |
CREATE TABLE로 고유 제약 조건 생성하기
테이블을 새로 만들 때 다음 문법으로 고유 제약 조건을 함께 정의할 수 있습니다.
CREATE TABLE table_name
(
column1 data_type [NULL | NOT NULL],
column2 data_type [NULL | NOT NULL],
...
CONSTRAINT constraint_name UNIQUE (uc_column1, uc_column2, ... uc_columnN)
);
- table_name: 생성하려는 테이블의 이름입니다.
- column1, column2: 테이블에 만들려는 열(컬럼)입니다.
- constraint_name: 생성할 고유 제약 조건의 이름입니다.
- uc_column1, uc_column2, ... uc_columnN: 고유 제약 조건을 구성하는 열들입니다.
예제 1: 단일 열에 고유 제약 조건 적용
CREATE TABLE employees
(
employee_id INT PRIMARY KEY,
employee_number INT NOT NULL,
last_name VARCHAR(50) NOT NULL,
first_name VARCHAR(50),
salary MONEY,
CONSTRAINT uq_employee_number UNIQUE (employee_number)
);
위 예제에서는 CREATE TABLE 문으로 직원(employees) 테이블을 생성하면서, 단일 열인 employee_number에 대해 uq_employee_number라는 이름의 고유 제약 조건을 설정했습니다. 이제 동일한 사원 번호를 가진 레코드는 더 이상 입력할 수 없습니다.
예제 2: 여러 열로 구성된 고유 제약 조건
CREATE TABLE employees
(
employee_id INT PRIMARY KEY,
employee_number INT NOT NULL,
last_name VARCHAR(50) NOT NULL,
first_name VARCHAR(50),
salary MONEY,
CONSTRAINT uq_employee_name UNIQUE (last_name, first_name)
);
두 개 이상의 열을 조합해 고유 제약 조건을 만들 수도 있습니다. 이 경우 성(last_name)과 이름(first_name)의 조합이 유일해야 하며, 개별 열의 값이 중복되는 것은 허용됩니다.
ALTER TABLE로 고유 제약 조건 추가하기
이미 존재하는 테이블에 고유 제약 조건을 나중에 추가하려면 ALTER TABLE 문을 사용합니다.
ALTER TABLE table_name
ADD CONSTRAINT constraint_name UNIQUE (column1, column2, ... columnN);
- table_name: 수정하려는 테이블의 이름으로, 고유 제약 조건을 추가할 대상 테이블입니다.
- constraint_name: 생성하려는 고유 제약 조건의 이름입니다.
- column1, column2, ... columnN: 고유 제약 조건을 구성하는 열들입니다.
예제
ALTER TABLE employees
ADD CONSTRAINT uq_employee_number UNIQUE (employee_number);
위 예제는 이미 존재하는 employees 테이블의 employee_number 열에 uq_employee_number라는 고유 제약 조건을 추가합니다. 여러 열을 대상으로 하려면 아래와 같이 작성하면 됩니다.
ALTER TABLE employees
ADD CONSTRAINT uq_employee_name UNIQUE (last_name, first_name);
고유 제약 조건 삭제하기
더 이상 필요하지 않은 고유 제약 조건은 DROP CONSTRAINT 구문으로 제거할 수 있습니다.
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
- table_name: 수정하려는 테이블의 이름으로, 고유 제약 조건을 삭제할 대상 테이블입니다.
- constraint_name: 삭제하려는 고유 제약 조건의 이름입니다.
예제
ALTER TABLE employees
DROP CONSTRAINT uq_employee_number;
위 예제는 employees 테이블에서 uq_employee_number라는 이름의 고유 제약 조건을 삭제합니다.
지금까지 SQL Server에서 CREATE TABLE과 ALTER TABLE을 사용해 고유 제약 조건을 생성·추가하고, DROP CONSTRAINT로 삭제하는 방법을 살펴보았습니다. 기본 키와의 차이점을 잘 기억해 두면 테이블 설계 시 상황에 맞는 제약 조건을 선택하는 데 큰 도움이 됩니다.